发生这种情况是因为 Inspectable 正在触发hasBottomLine要设置的didSet属性,因此在加载主视图之前要调用属性观察器。
我猜你lineHeightConstraint可能被定义为一个隐式解包的可选,比如:
@IBOutlet weak var lineHeightConstraint: NSLayoutConstraint!
Run Code Online (Sandbox Code Playgroud)
您必须在使用它之前解开可选项,例如:
lineHeightConstraint?.constant = hasBottomLine ? 3 : 0
Run Code Online (Sandbox Code Playgroud)
在加载视图后,您可能仍然需要设置此约束,因此您可能需要检查可选项是否包含 nil,如果是,请设置一个标志,然后在您的viewDidLoad方法中执行此行。(或者也许你可以在你的 viewDidLoad 中调用它)
更新的答案,额外的信息是此代码位于子类 UIView 而不是 UIViewController 中。
viewDidLoad您可以在 UIView 的layoutSubviews方法中执行此操作,而不是在您的方法中更新约束常量。例如:
override func layoutSubviews() {
super.layoutSubviews()
lineHeightConstraint?.constant = hasBottomLine ? 3 : 0
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1378 次 |
| 最近记录: |