因此,我制作了一个宽度/高度为0的矩形,并在其顶部放置了默认填充,然后读取该矩形的高度(即默认填充的大小),并将其存储在绑定的CGFloat中。它也会隐藏自己。
然后可以将该值传递到UITextView包装器中。
struct Defaults: View {
@Binding var padding: CGFloat
@State var isHidden = false
@ViewBuilder
var body: some View {
if !isHidden {
Rectangle()
.frame(width: 0,height: 0)
.padding(.top)
.background(GeometryReader { geometry in
Rectangle().onAppear {
self.padding = geometry.size.height
self.isHidden = true
}
})
}
}
}
struct Example: View {
@State var padding = CGFloat()
@ViewBuilder
var body: some View {
Defaults(padding: $padding)
Rectangle().frame(width: padding,height: padding)
}
}
,
我不知道您的确切用例,但是一种可能的解决方法是使用容器堆栈(例如 VStack 和 GeometryReader 。然后将可用宽度传递给 UIViewRepresentable ,并将其设置为 preferredMaxLayoutWidth 。
VStack(alignment: .leading) {
GeometryReader { geometry in
UIKitLabel(width: geometry.size.width,attributedString: NSAttributedString(string: "Hello"))
.fixedSize()
.layoutPriority(0)
}
}.padding()
然后在自定义组件的 makeUIView 方法中,执行以下操作:
func makeUIView(context: Context) -> UILabel {
let label = UILabel(frame:CGRect.zero)
label.preferredMaxLayoutWidth = width
return label
}
本文链接:https://www.f2er.com/3102471.html