Q:

Swift - viewing different position on viewDidLoad and viewDidAppear

I have an understanding problem...
I created two similar views (same origin and same size) and section view,
While i created those views - one in viewDidLoad and the other in viewDidAppear - when i put similar starting point in the origin x and y of each view that refer to section i get those views in different position.
Can someone explain me what is the reason that those views isn't in the same position?
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);
    }
}

A:

Reason is because viewDidAppear method called after autolayout engine finished it work, viewDidLoad - before. Before autolayout is done frames of any views on screen are not correct in most cases. You may use method viewDidLayoutSubviews as closest point when autolayout is done and frames are correct. Note that this method can be called multiple times.
Upd.
Autolayout used by default for view in UIViewController, as well as for views in storyboard; you added custom views in code, which are don't use autolayout. You should be carefully mixing autolayout and frame-initialized views.

