将lineBreakMode设置为byWordWrapping并将numberOfLines设置为0似乎还不够:
struct MyTextView: UIViewRepresentable {
func makeUIView(context: Context) -> UILabel {
let label = UILabel()
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.text = "Here's a lot of text for you to display. It won't fit on the screen."
return label
}
func updateUIView(_ view: UILabel, context: Context) {
}
}
struct MyTextView_Previews: PreviewProvider {
static var previews: some View {
MyTextView()
.previewLayout(.fixed(width: 300, height: 200))
}
}
字符串
无论我对lineBreakMode使用哪种设置,文本都不会换行。画布预览和实时预览都是这样的:
的数据
我得到的最接近的是设置preferredMaxLayoutWidth,这确实会导致文本换行,但似乎没有一个值表示“无论View的大小”。
3条答案
按热度按时间wnrlj8wa1#
可能的解决方案是将宽度声明为MyTextView上的变量:
字符串
然后使用GeometryReader找出可用空间的大小,并将其传递到初始化器:
型
gmxoilav2#
尝试在makeUIView()函数中使用这行代码
字符串
0g0grzrc3#
我发现了一种“讨厌”的方法,它允许
UILabel
在用作UIViewRepresentable
时正确 Package (* 即使在ScrollView
* 内),而不需要GeometryReader
:每当创建
UILabel
时:字符串
这可确保:
然后...
width
属性添加到UIViewRepresentable
,该属性将用于设置preferredMaxLayoutWidth
UIViewRepresentable
到香草SwiftUI.View
GeometryReader
作为覆盖以防止扩展型
旧答案:
...
在您的
updateUIView(_:context:)
中:型
***免责声明:**我不是
main.async
调用的超级粉丝,特别是当它们与一些任意延迟结合使用时,但这似乎可以以一致的方式完成工作。