NSLayoutConstraint 自行重新激活

Posted

技术标签:

【中文标题】NSLayoutConstraint 自行重新激活【英文标题】:NSLayoutConstraint re-activates by itself 【发布时间】:2017-03-29 13:32:21 【问题描述】:

我在.xib 文件中为UILabel 创建了strong 约束,并为其创建了一个出口。

在我的代码中,我设置了self.constraint.active = NO,但在应用程序加载后,当我打开Debug View Hierarchy 时,同样的约束处于活动状态。

我尝试将其设置为viewDidLoadupdateViewConstraintsviewDidLayoutSubviews,但无济于事。

我还创建了一个NSLayoutConstraint 子类,重写了setActive: 方法并在其中放置了一个断点,但只有我的代码触发了它。

【问题讨论】:

你是什么意思重新激活它自己?约束是什么? @giorashc,等一下,我点击enter 以从弹出窗口中添加一个标签,它决定改为发布问题-_- 您在代码中的哪个位置将活动设置为NO?另外,您的插座是weak 还是strong?我相信约束出口必须是strong 如果您尝试在viewDidAppear 中将其设置为NO 会发生什么? @Hodson,它有效!但这没有任何意义。为什么viewDidAppear:之后还有一个布局pass? 【参考方案1】:

在使用约束时,我建议尽可能晚地进行。根据您的情况,最早可能是viewDidLoad

无论您最终做什么,都可以通过layoutIfNeeded 调用强制刷新。

如果我没记错的话,您可以禁用约束,然后强制更新约束/布局 (updateConstraintssetNeedsLayout),然后调用 layoutIfNeeded。但我认为您只需要修改您的约束,这样做会自动将您的视图设置为在有时间或调用layoutIfNeeded 时自行重新布局。

无论哪种方式,请尝试仅使用这两行,否则,添加我放在括号之间的那些。

我不会撒谎,有时约束是部分 ios、部分技能、部分黑魔法。

【讨论】:

以上是关于NSLayoutConstraint 自行重新激活的主要内容,如果未能解决你的问题,请参考以下文章

重新激活 NSLayoutConstraint 在展开可选时发现 nil

NSLayoutConstraint 激活/停用

激活/停用自动布局 NSLayoutConstraint

在 `cellForRowAt` 中激活 NSLayoutConstraint 直到滚动后才会呈现

如何激活以前停用的约束?

webstorm 永久激活