我注意到在某些情况下,我在Swift中的一个约束上设置isActive = false后,当我稍后尝试访问它时它是nil,但情况并非总是如此.在一种情况下,我有两个视图控制器,并且在viewWillAppear中的约束上都设置isActive为false,但是在一个视图中,约束稍后可用,我可以设置isActive = true而在另一个视图中它是nil.
什么会导致这种行为?我能够通过将优先级设置为1或900来绕过它,但它仍然留下了背景中真正发生的事情的问题.
isActive
不是一个非常好的财产名称.约束实际上未停用,它将从视图层次结构中删除.
如果视图具有对约束的唯一强引用,则将释放约束,并且您将无法再次激活它.
这意味着如果您希望将约束保留在内存中,则必须强烈引用它,例如:
@IBOutlet var myConstraint: NSLayoutConstraint!
不
@IBOutlet weak var myConstraint: NSLayoutConstraint?
如果你有一个强大的参考,nil
除非你nil
自己设置参考,否则参考将永远不会被设置.