swift - viewDidLoad() 中未设置程序视图的框架
问题描述
我是压倒一切loadView()
的,所以有以下
let testView = UIView()
override func loadView() {
view = UIView()
view.backgroundColor = .red
self.view.addSubview(testView)
testView.backgroundColor = .brown
testView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
testView.topAnchor.constraint(equalTo: view.topAnchor),
testView.leftAnchor.constraint(equalTo: view.leftAnchor),
testView.heightAnchor.constraint(equalToConstant: 300),
testView.widthAnchor.constraint(equalToConstant: 300)
])
}
override func viewWillAppear(_ animated: Bool) {
print (testView.frame) // (0.0, 0.0, 0.0, 0.0)
}
现在,当我想在子视图出现之前更改它们时,似乎子视图的框架直到 viewDidAppear 才设置 - 但我希望它们被设置viewDidLoad()
最早设置这样一个框架的点是什么?
解决方案
View 基本上是在调用layoutSubview()
or时渲染viewDidLayoutSubviews()
的。viewDidLoad()
并viewWillAppear()
在尚未应用约束且未呈现视图时提前调用。您可以检查一次viewDidLayoutSubviews
被调用或viewDidAppear()
推荐阅读
- flutter - 从 Flutter 的另一个屏幕调用 Future 函数
- python-3.x - 在多元线性回归中打印预测值时出错
- javascript - React 给我错误 TypeError: XXX.map is not a function
- teradata - 如何在 Teradata 中使用 Qualify 语句排除记录
- algorithm - 到达图中具有连通分量的每个节点的最短时间
- node.js - NodeJS,MongoDB - 从 GET 请求中的聚合返回 JSON 响应
- python - DataFrame 中按其他列值分组的出现次数
- c# - 一个类中的两个构造函数 C#
- python - 第二个python代码bs4并将数据保存到文本文件
- javascript - Gulpfile 不编译 @includes 和 @imports