我有一个理解问题......
我创建了两个相似的视图(相同的原点和相同的大小)和剖面视图,
虽然我创建了这些视图 - 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);
}
}
答案 0 :(得分:5)
原因是因为viewDidAppear
方法在自动布局引擎完成后调用了viewDidLoad
- 之前。在自动布局完成之前,在大多数情况下,屏幕上任何视图的帧都不正确。当自动布局完成且帧正确时,您可以使用方法viewDidLayoutSubviews
作为最近点。请注意,此方法可以多次调用。
<强> UPD。强>
默认情况下,view
中UIViewController
使用的自动退出,以及故事板中的观看次数;您在代码中添加了自定义视图,这些视图不使用autolayout。您应该仔细混合autolayout和帧初始化视图。