如何获得默认的系统填充值?

我正在使用SwiftUI,但是我已经创建了一个可表示的UITextView

我想将插图设置为系统默认填充,以使其与应用程序的其余部分匹配。

这是我现在正在使用的:

UITextView().textContainerInset = UIEdgeInsets(top: 15,left: 15,bottom: 15,right: 15)

这看起来不错,但如果可能的话,我真的更愿意使用默认的系统填充。

padding()的文档规定以下内容:

  

长度

     

在每个边上插入此视图的数量。如果为nil,则为系统默认值。

如何获取默认的系统填充CGFloat值?

etreg 回答:如何获得默认的系统填充值?

因此,我制作了一个宽度/高度为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

大家都在问