重新激活NSLayoutConstraint在解包可选时找到nil

时间:2016-05-23 11:02:01

标签: ios swift autolayout uitextview

我想以编程方式设置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 个答案:

答案 0 :(得分:9)

设置插座strong

@IBOutlet strong var descriptionHeight: NSLayoutConstraint!

修改

似乎Xcode的最新版本增加了出口:

@IBOutlet var descriptionHeight: NSLayoutConstraint!
正如@Dan在评论中提到的那样。