重新激活 NSLayoutConstraint 在展开可选时发现 nil
Posted
技术标签:
【中文标题】重新激活 NSLayoutConstraint 在展开可选时发现 nil【英文标题】:Re-activating NSLayoutConstraint finds nil while unwrapping optional 【发布时间】:2016-05-23 11:02:01 【问题描述】:我想以编程方式设置我的UITextView
的高度以相应地适应内容。我已将UITextView
的默认高度设置为遵循我设置的布局约束,但希望在用户触摸按钮时更改它。
@IBOutlet weak var descriptionHeight: NSLayoutConstraint!
我尝试使用layoutIfNeeded()
,但它不会改变我的文本视图的大小(因为大小由布局约束保持)。
我尝试像这样暂时禁用约束:
print("before: \(descriptionTextView.frame)")
descriptionHeight.active = false
descriptionTextView.layoutIfNeeded()
print("after: \(descriptionTextView.frame)")
descriptionHeight.constant = descriptionTextView.frame.height
descriptionHeight.active = true
但是在停用后访问插座时,会抛出异常:
致命错误:在展开可选值时意外发现 nil
似乎它正在正确计算尺寸:
之前:(8.0, 8.0, 398.0, 100.0)
之后:(8.0、8.0、398.0、954.666666666667)
为什么会这样?
有没有更好的方法来计算和设置我的UITextView
的正确大小?
【问题讨论】:
【参考方案1】:制作插座strong
:
@IBOutlet strong var descriptionHeight: NSLayoutConstraint!
编辑:
似乎最新版本的 Xcode 将出口添加为:
@IBOutlet var descriptionHeight: NSLayoutConstraint!
正如@Dan 在 cmets 中提到的那样。
【讨论】:
strong 不起作用(可能在以前的 swift 版本中确实如此),而只是从声明中删除“弱”。以上是关于重新激活 NSLayoutConstraint 在展开可选时发现 nil的主要内容,如果未能解决你的问题,请参考以下文章