ios - iOS什么时候移除不活跃的约束

标签 ios autolayout

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

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

最佳答案

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

如果 View 只有对约束的强引用,则约束将被释放,您将无法再次激活它。

这意味着如果你想让约束保留在内存中,你必须强引用它,例如:

@IBOutlet var myConstraint: NSLayoutConstraint!

不是

@IBOutlet weak var myConstraint: NSLayoutConstraint?

如果您保留强引用,除非您自己将其设置为 nil,否则该引用将永远不会设置为 nil

关于ios - iOS什么时候移除不活跃的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41596538/

相关文章:

ios - 为什么 UITableViewAutomaticDimension 不起作用?

iOS 照片库 - 如何获取真实的文件名?

iphone - 什么时候写“NSString * str”或“NSString str”?

ios - 为什么这个约束不起作用?

ios - 当 UIView 高度改变时更新 AutoLayout 约束

ios - 如何将 MPMediaPickerController 与文档目录中的本地文件一起使用?

android - 无法在 iOS 上与 Bing Map 交互; Android 不显示折线(Flex 移动应用程序,通过 StageWebView 使用 Javascript API)

objective-c - 使用 AutoLayout 在哪里添加我想在 NSScrollView 中 float 的 subview ?

swift - TraitCollectionDidChange 对于 iphone X 的行为有所不同

ios - 自动调整(动态高度)表格 View 单元格的问题