何时以及如何使用 layoutIfNeeded
?我知道当我们更改 View 的布局时,我们可以调用 setNeedsLayout
来更新布局,但不确定何时应该使用 layoutIfNeeded
。
注意:我在实际代码中使用了 layoutIfNeeded
,但忘记了它是在什么上下文中使用的。
最佳答案
layoutIfNeeded
强制接收器在需要时立即布局其 subview 。
假设您已经覆盖了 layoutSubviews
,并且 UIKit 认为您的 View 出于某种原因需要布局(例如,您在处理某些用户操作时调用了 setNeedsLayout
)。然后,您的自定义 layoutSubviews
方法将立即被调用,而不是在常规 UIKit 运行循环事件序列中通常被调用的时候(在事件处理之后,但在 drawRect:
之前) .
您可能需要在单个运行循环中调用 layoutIfNeeded
的示例:
- 您调整了一个自定义 View 的大小,其中包含一个具有自定义布局的表格 View 。
setNeedsLayout
已设置,以便稍后调用layoutSubviews
。 - Controller 对象要求 TableView 在处理用户事件时滚动到某个特定的单元格。
- 您的自定义 View 在
layoutSubviews
中执行一些自定义的 TableView 大小调整,从而更改 TableView 大小。
问题是当 Controller 要求 TableView 滚动时(第 2 步), TableView 的边界是陈旧的。更新后的边界只会在稍后设置在 TableView 上(第 3 步)。 layoutSubviews
完成后, Controller 希望 TableView 滚动到的内容可能实际上不可见。一个解决方案是让 Controller 在它知道这可能发生的情况下调用 layoutIfNeeded
。
关于ios - layoutIfNeeded 是如何使用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1182945/