【问题标题】:How can I trigger an update to all the autolayout constraints?如何触发对所有自动布局约束的更新?
【发布时间】:2013-12-08 09:02:58
【问题描述】:

我以编程方式修改了一个自动布局约束。它对某个特定视图生效,但与该视图的其他约束绑定的其他视图不会改变它们的位置。是否有“updateAllConstraints”方法?

【问题讨论】:

  • 也许你可以发布一个你的约束屏幕:我唯一的想法是,这些其他视图通过不可拉伸的约束以某种方式绑定到其他元素。

标签: ios autolayout


【解决方案1】:

在要更新的视图上调用这两个方法:

-setNeedsLayout
-layoutIfNeeded

第一个告诉布局系统,这个视图需要布局,因为它有一些变化,一切都应该重新计算。第二个强制布局系统现在运行,布局系统在运行时的特定时间被触发,用这个方法你说:“现在就做”。

【讨论】:

  • 我可以通过单击 UIButton 更改 Imageview 的约束吗?如果是这样,请如何解释,因为我是新手。
  • 完全同意这个答案!
  • @Sofeda 当然可以。在您的 UIButton 的操作方法中,您可以删除 UIImageView 的约束,例如view.removeConstraints(imageView) 然后设置新的约束。
  • 即使视图没有附加到层次结构中,答案中给出的代码也会重新计算约束
【解决方案2】:

是的 UIView 上有一个方法叫- (void)updateConstraintsIfNeeded

https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/updateConstraintsIfNeeded

但我不认为这是你的问题

【讨论】:

    【解决方案3】:

    问题在于没有正确设置约束,在这种情况下,setNeedsLayout 或 updateConstraintsIfNeeded 都不能提供帮助。

    【讨论】:

      【解决方案4】:

      遇到此主题并正在寻找在菜单中找到此主题的人。

      我发现最好的是:

      1. 选择要“弹出”回约束的项目

      2. 顶部菜单:编辑器/更新帧(或/)快捷键:command + option + =

      希望这会有所帮助

      【讨论】:

      • 问题在于如何以编程方式进行。你的答案是正确的,但不幸的是不适合那个问题
      • 是的@Taier,我已经编辑了我的帖子以反映您的评论,谢谢。
      • 快 1 年 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多