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

Wii*_*ard 7 uitextview ios autolayout swift

我想以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
Run Code Online (Sandbox Code Playgroud)

但是当停用它后访问插座时,它会引发异常:

致命错误:在展开Optional值时意外发现nil

它似乎正在正确计算大小:

之前:(8.0,8.0,398.0,100.0)

之后:(8.0,8.0,398.0,954.666666666667)

为什么会这样?有没有更好的方法来计算和设置我的适当大小UITextView

Iul*_*rei 9

做出口strong:

@IBOutlet strong var descriptionHeight: NSLayoutConstraint!
Run Code Online (Sandbox Code Playgroud)

编辑:

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

@IBOutlet var descriptionHeight: NSLayoutConstraint!
Run Code Online (Sandbox Code Playgroud)

正如@Dan在评论中也提到的那样.

  • strong不起作用(也许在以前的swift版本中起作用),只是从声明起作用中删除了“弱”。 (2认同)