执行setNeedsLayout和layoutIfNeeded后的frame总是能得到准确的view的frame吗?

问题描述 投票:0回答:0

我的理解是,执行后

setNeedsLayout
会将视图标记为“脏”,以便在下一个渲染周期中,视图将被重新布局。如果视图被标记为“脏”,
layoutIfNeeded
将强制立即触发重新布局。

但是,即使

layoutIfNeeded
立即开始布局,也不意味着
layoutIfNeeded
之后的代码会等待完成。渲染部分是一个异步操作,它将由核心图形通过runloop来处理。

myView.setNeedsLayout()
myView.layoutIfneeded()
print(myView.frame)

我的观点是,上面帧的打印可能并不总是得到正确的帧,因为渲染操作是一个异步任务,我说得对吗?

一些背景:

  1. myView 已渲染完成。
  2. 由于某些异步数据任务,其子视图的高度约束之一发生变化。
  3. 像上面提到的那样执行上面的setNeedsLayout和layoutIfNeed。
ios swift uikit core-graphics runloop
© www.soinside.com 2019 - 2024. All rights reserved.