如何获取默认的系统填充值?
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】:我不知道您的确切用例,但一种可能的解决方法是使用容器堆栈(例如 VStack
和 GeometryReader
。然后将可用宽度传递给 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
【讨论】:
以上是关于如何获取默认的系统填充值?的主要内容,如果未能解决你的问题,请参考以下文章