ios - layoutIfNeeded 是如何使用的?

标签 ios iphone uikit

何时以及如何使用 layoutIfNeeded?我知道当我们更改 View 的布局时,我们可以调用 setNeedsLayout 来更新布局,但不确定何时应该使用 layoutIfNeeded

注意:我在实际代码中使用了 layoutIfNeeded,但忘记了它是在什么上下文中使用的。

最佳答案

layoutIfNeeded 强制接收器在需要时立即布局其 subview 。

假设您已经覆盖了 layoutSubviews,并且 UIKit 认为您的 View 出于某种原因需要布局(例如,您在处理某些用户操作时调用了 setNeedsLayout)。然后,您的自定义 layoutSubviews 方法将立即被调用,而不是在常规 UIKit 运行循环事件序列中通常被调用的时候(在事件处理之后,但在 drawRect: 之前) .

您可能需要在单个运行循环中调用 layoutIfNeeded 的示例:

  1. 您调整了一个自定义 View 的大小,其中包含一个具有自定义布局的表格 View 。 setNeedsLayout 已设置,以便稍后调用 layoutSubviews
  2. Controller 对象要求 TableView 在处理用户事件时滚动到某个特定的单元格。
  3. 您的自定义 View 在 layoutSubviews 中执行一些自定义的 TableView 大小调整,从而更改 TableView 大小。

问题是当 Controller 要求 TableView 滚动时(第 2 步), TableView 的边界是陈旧的。更新后的边界只会在稍后设置在 TableView 上(第 3 步)。 layoutSubviews 完成后, Controller 希望 TableView 滚动到的内容可能实际上不可见。一个解决方案是让 Controller 在它知道这可能发生的情况下调用 layoutIfNeeded

关于ios - layoutIfNeeded 是如何使用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1182945/

相关文章:

iPhone 界面生成器和代表

objective-c - 为什么某些 UIViewController 属性在未使用 viewDidLoad 设置时变为 nil?

iphone - 如何将ios音频上传到服务器?

ios - 在 iOS 上,drawRect 不能在 View 边界之外绘制?

ios - ABAddressBookRequestAccessWithCompletion 的最佳实践

ios - 网络连接丢失

ios - ReskKit 发布/放置响应 header

java - 用户是否可以授予应用程序权限,以便该应用程序可以在需要时让设备被发现?

ios - 如何在 swift 中为 NSDate 做核心数据获取谓词?我想按月过滤

iphone - 使用 CGRectMake 移动 subview 会导致崩溃