gpt4 book ai didi

ios - 我应该在 viewDidLayoutSubviews() 中调用 layoutIfNeeded

转载 作者:可可西里 更新时间:2023-11-01 00:59:15 25 4
gpt4 key购买 nike

我正在根据用户使用的设备更改一些约束并在某个 VC 上隐藏一些元素。

像这样:

   override func viewDidLayoutSubviews() {
if Iphone6 == true {
self.view.layoutIfNeeded()
self.someConst.constant = 70
self.anotherConst.constant = 67
self.someButton.hidden = true
self.someView.hidden = true
self.view.layoutIfNeeded()
}
}

现在我想知道是否需要在 viewDidLayoutSubviews 中调用 layoutIfNeeded() 两次?

我知道如果在更改约束时使用 animateWithDuration 必须调用 layoutIfNeeded() 两次,但这也适用于 viewDidLayoutSubviews?

谢谢,

最佳答案

layoutIfNeeded() 的目的是强制同步(本质上是“立即”)重绘 View 及其 subview 。在处理动画时,Apple 认为最佳做法是在动画 block 之前调用 layoutIfNeeded() 以确保挂起的布局操作已完全完成。这为操作准备 View 以确定和设置它们的新布局。 layoutIfNeeded() 然后在动画 block 中被第二次调用,以确保对布局的动画更改也已完成。

Apple 的 viewDidLayoutSubviews() 文档表示,调用此方法并不表示已调整 View subview 的各个布局。因此,当您开始检查正在使用的设备并相应地调整布局时,并不能保证所有先前的布局操作都已成功完成。因此,最好继续调用 layoutIfNeeded() 两次。一次是为了确保之前的所有布局操作都已完成,一次是为了执行您根据设备类型所做的布局更改。

来源:

How do I animate constraint changes?

setNeedsLayout vs layoutIfNeeded Explained

viewDidLayoutSubviews Reference

关于ios - 我应该在 viewDidLayoutSubviews() 中调用 layoutIfNeeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37930020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com