Swift - 在viewDidLoad和viewDidAppear上查看不同的位置

时间:2016-06-27 14:32:30

标签: ios swift viewdidload viewdidappear

我有一个理解问题...... 我创建了两个相似的视图(相同的原点和相同的大小)和剖面视图, 虽然我创建了这些视图 - viewDidLoad中的一个视图和viewDidAppear中的另一个视图 - 当我在每个视图的原点x和y中放置类似的起始点时,我会将这些视图放在不同的位置。 有人可以解释一下这些观点不在同一个位置的原因是什么?

import UIKit

class ViewController: UIViewController {

    @IBOutlet var sec: UIView!

    override func viewDidLoad() {
        let shape = UIView(frame: CGRect(x: sec.frame.width/2, y: sec.frame.height/2, width: 100, height: 100));
        shape.backgroundColor = UIColor.redColor();
        view.addSubview(shape); 
    }

    override func viewDidAppear(animated: Bool) {    
        let shape2 = UIView(frame: CGRect(x: sec.frame.width/2, y: sec.frame.height/2, width: 100, height: 100));
        shape2.backgroundColor = UIColor.greenColor();
        view.addSubview(shape2);
    }
}

1 个答案:

答案 0 :(得分:5)

原因是因为viewDidAppear方法在自动布局引擎完成后调用了viewDidLoad - 之前。在自动布局完成之前,在大多数情况下,屏幕上任何视图的帧都不正确。当自动布局完成且帧正确时,您可以使用方法viewDidLayoutSubviews作为最近点。请注意,此方法可以多次调用。

<强> UPD。 默认情况下,viewUIViewController使用的自动退出,以及故事板中的观看次数;您在代码中添加了自定义视图,这些视图不使用autolayout。您应该仔细混合autolayout和帧初始化视图。