iOS什么时候删除非活动约束

问题描述 投票:0回答:1

我注意到,在某些情况下,在 Swift 中的约束上设置 isActive = false 后,当我稍后尝试访问它时,它为零,但情况并非总是如此。在一种情况下,我有两个视图控制器,并且都在 viewWillAppear 中的约束上将 isActive 设置为 false,但在一个视图中,约束稍后可用,我可以设置 isActive = true,而在另一个视图中则为 nil。

什么会导致这种行为?我可以通过将优先级设置为 1 或 900 来解决这个问题,但这仍然留下了后台到底发生了什么的问题。

ios autolayout
1个回答
12
投票

isActive
不是一个很好的属性名称。该约束实际上并未停用,而是从视图层次结构中删除了

如果视图对约束有唯一的弱引用,则约束将被释放,并且您将无法再次激活它。

这意味着如果您希望将约束保留在内存中,则必须强烈引用它,例如:

@IBOutlet var myConstraint: NSLayoutConstraint!

不是

@IBOutlet weak var myConstraint: NSLayoutConstraint?

如果您保留强引用,则引用永远不会设置为

nil
,除非您自己将其设置为
nil

© www.soinside.com 2019 - 2024. All rights reserved.