ios - 这是布局我的视图控制器的好方法吗
问题描述
人们通常会获得真实的帧大小viewDidAppear()
或viewDidLayoutSubviews()
计算他们的视图,但是我通常会遇到这些方法的问题。
我希望我的观点在它们出现在屏幕上之前已经被计算过,所以viewDidAppear()
不合适,viewWillAppear()
有时它有效,有时它不。viewDidLayoutSubviews()
被调用了很多次,所以它也不是一个好的选择。
所以下面是我处理它的方法,我总是用这种方法得到想要的结果。这有什么缺点吗?
override func viewDidLoad() {
super.viewDidLoad()
self.view.frame = UIScreen.main.bounds
self.view.layoutIfNeeded()
// put everything needs to be calculated here
}
解决方案
layoutIfNeeded
从文件:Lays out the subviews immediately, if layout updates are pending.
这是一个同步调用,它告诉系统您想要一个视图及其子视图的布局和重绘,并且您希望它立即完成而无需等待更新周期。
https://developer.apple.com/documentation/uikit/uiview/1622507-layoutifneeded
今年你还应该看看这个 WWDC 视频 https://developer.apple.com/videos/play/wwdc2018/220/
推荐阅读
- python - 从 QSettings 恢复时正确加载小部件
- bash - MERGE 2 csv 文件使用 BASH 或 Awk 删除重复项
- python - 如何在单个 Docker 容器中运行多个 django 服务?
- python - 定义变量的类型!PYTHON
- java - Java 8 中需要默认方法实现
- sql - 如何为多个组找到每个组中的最大值,并将其输出到一个表中
- nltk - Python NLTK 分数从 0 到 10
- spring - Spring Security 多个 AuthenticationProviders
- php - 如何在 CI 中结合 get_where 和 like?
- angular - 如何控制使用 ngModel 绑定的值的类型(数字被扭曲为字符串)?