【问题标题】:NSLayoutConstraint re-activates by itselfNSLayoutConstraint 自行重新激活
【发布时间】: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?

标签: ios objective-c ios-autolayout


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多