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

Posted

技术标签:

【中文标题】如何获取默认的系统填充值?【英文标题】:How to get default system padding value? 【发布时间】:2019-11-14 12:56:08 【问题描述】:

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

我想将 insets 设置为系统默认填充,以便它与应用的其余部分匹配。

这是我现在使用的:

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

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

padding() 的文档说明如下:

长度

在每条边上插入此视图的数量。如果为nil,则该金额为系统默认金额。

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

【问题讨论】:

我认为 padding 相当于 SwiftUI 的 LayoutMargin:developer.apple.com/documentation/uikit/uiview/… 【参考方案1】:

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

【讨论】:

【参考方案2】:

我不知道您的确切用例,但一种可能的解决方法是使用容器堆栈(例如 VStackGeometryReader。然后将可用宽度传递给 UIViewRepresentable 并将其设置为 @987654324 @。

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

【讨论】:

以上是关于如何获取默认的系统填充值?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过另一个选择在输入填充中获取值

如何从props传递对象获取默认日期为特定日期

如何从一个类屏幕获取值到另一个类并在颤动中填充这些值?

如何自动获取当前日期和时间到日期时间字段

如何在没有 _id 参考的情况下获取 GraphqQL 列表中模型的填充值?

如何在 jsp 和 ajax 中为两个选择选项框动态地从 mysql 获取和填充值到 HTML 选择选项