AutoLayout相关

//Intrinsic Content Size 固有大小

资料引用:

下面这个讲了AutoLayout如何实现自动和使用传统的frame相结合

http://www.cocoachina.com/industry/20140521/8498.html  

1.从viewController 到 view

 首先我们看一下 使用了autoLayout的xib 是如何工作的 :

我们开始: 

    ViewController * viewC = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];

        _window.rootViewController = viewC

(下面是几个方法)

- (void)viewDidLoad 

-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

-(void)awakeFromNib

 -(void)updateViewConstraints

-(void)layoutSubviews

 他们的调用顺序是什么呢?

 1.1首先对ViewController类发送alloc消息的时候分配了空间; 使用initWithNibName进行初始化的时候,去读取xib文件, xib被唤醒,调用awakeFromNib,此时还没有self的概念  这时候如果去调用self的话(e.g [self.view doSth])会实例化新的ViewController ,继续往后的话你会发现viewDIdload被调用两次,因为其实实例化了是两个不同的实例.

1.2 将nib唤醒后调用

-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

 并且返回初始化好的对象

1.3 调用viewDidLoad 这时候会发现此时视图的frame 是xib中的frame 而非实际显示的frame 因为此时还没有通过约束进行布局

1.4调用 

 -(void)updateViewConstraints 此时会通过约束进行frame的定制工作 

 1.5  上述工作完成后 调用视图的layoutSubviews

-(void)layoutSubviews

很明显在layoutSubviews 改变 视图frame的行为是不理智的因为 在layoutSubView 之前会读取约束把你设置的frame给干掉

原文地址:https://www.cnblogs.com/jaj-angel/p/4102918.html