首页 > 解决方案 > 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()

最早设置这样一个框架的点是什么?

标签: swift

解决方案


View 基本上是在调用layoutSubview()or时渲染viewDidLayoutSubviews()的。viewDidLoad()viewWillAppear()在尚未应用约束且未呈现视图时提前调用。您可以检查一次viewDidLayoutSubviews被调用或viewDidAppear()


推荐阅读