【问题标题】:setNeedsLayout or layoutIfNeeded necessary after changing constraint constant?更改约束常量后是否需要 setNeedsLayout 或 layoutIfNeeded?
【发布时间】:2015-05-08 12:50:19
【问题描述】:

在 iOS 上,是否有必要在以编程方式更改约束的常量后进行任何 API 调用(例如 setNeedsLayoutlayoutIfNeeded)?在我的用例中,我对动画更改不感兴趣。我相信有一些错误(例如:this one)调用这些函数是一种解决方法。但除了那个边缘情况,我不需要在我的代码中调用它们。这只是偶然发生的,还是有明确的来源提到在更改约束常量时要做什么?

一些 SO 答案(herehere)说设置常量就足够了,但没有任何支持参考。

Apple 的 iOS 自动布局指南除了在 animation block 中没有提及任何内容。 Cocoa Auto Layout Release Notes 确实说调用 setNeedsLayout 是不必要的,除非您还在自定义视图中覆盖 layout。但是,该文档似乎是特定于 OSX 的。

【问题讨论】:

    标签: ios autolayout constraints


    【解决方案1】:

    如果想立即获得正确的视图框架,您应该手动调用这些 API。 (例如获取动画开始/结束帧)或者我们不需要手动调用这些API。

    我使用 MASConstraint 框架,我从不调用这些 API。

    我不确定当您添加/删除约束但不更新约束时是否有必要。 :(

    【讨论】:

      【解决方案2】:

      是的,必须在更改布局约束的constant 后调用setNeedsLayout,因为仅此更改并不能算作布局失效。

      【讨论】:

      • 很遗憾,我还没有在官方文档中找到这些信息。
      • 错了,没有。它是自动调用的。
      猜你喜欢
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      相关资源
      最近更新 更多