WKInterfaceController,如何以编程方式设置“间距”和“插图”

Posted

技术标签:

【中文标题】WKInterfaceController,如何以编程方式设置“间距”和“插图”【英文标题】:WKInterfaceController, how to programmatically set "Spacing" & "Insets" 【发布时间】:2020-11-14 09:24:52 【问题描述】:

我查看了 Apple 的 WKInterfaceController 文档:

Insets:在界面控制器的边缘与其内容之间插入的空间量(以磅为单位)。选择自定义可让您为顶部、底部、左侧和右侧边缘指定不同的值。

间距:界面控制器中项目之间的额外间距(以磅为单位)。

在 Interface.storyboard 中,我可以在右侧面板上设置这些,基本上我将 Insets 设置为 Custom 并将它们全部设置为 0。对于 Spacing,我检查“Custom”并将其设置为 0 以摆脱所有空间

有没有办法以编程方式设置这些?我尝试了代码(我找不到 WKInterfaceController 的“Spacing”属性,我想知道这是从哪里来的,但我认为对于 Insets相应的属性是“contentSafeAreaInsets”,它采用“UIEdgeInsets”)

对于“contentSafeAreaInsets”,当我尝试时,它看起来只是一个只能获取的道具——错误:“无法用存储的属性 'contentSafeAreaInsets' 覆盖”:

override var contentSafeAreaInsets: UIEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)

我也尝试在清醒状态下设置它,甚至添加一个覆盖初始化,但似乎无法以编程方式设置它。当我尝试其他东西时也是如此,例如尝试为 WKInterfaceGroup 设置“间距”(我什至找不到间距定义,除了它出现在界面故事板的右侧面板中)

难道这些只是不打算在代码中设置而必须在界面故事板中设置吗?

【问题讨论】:

【参考方案1】:

由于contentSafeAreaInsets 是一个计算属性,您应该这样覆盖它:

override var contentSafeAreaInsets: UIEdgeInsets 
     UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)

【讨论】:

以上是关于WKInterfaceController,如何以编程方式设置“间距”和“插图”的主要内容,如果未能解决你的问题,请参考以下文章

WKInterfaceController 中的左边缘滑动会挂起 Apple Watch 中的 UI

防止关闭模式 WKInterfaceController

可以在 SwiftUI Watch 项目中实例化 WKInterfaceController 吗?

我们如何为 WKInterfaceController 移植 addGestureRecognizer(recognizer)

XCTestCase 崩溃的 WKInterfaceController 子类上的“alloc init”

WKInterfaceLabel 未在 WKInterfaceController 中更新 - Swift Apple watch dev