zoukankan      html  css  js  c++  java
  • 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给干掉

  • 相关阅读:
    147-21. 合并两个有序链表
    146-14. 最长公共前缀
    145-如何查看python帮助文档
    144-38. 外观数列
    143-121. 买卖股票的最佳时机
    142-206. 反转链表
    141-98. 验证二叉搜索树
    Nginx中文域名配置
    Keepalived+Nginx架构整理版
    Tomcat启动脚本
  • 原文地址:https://www.cnblogs.com/jaj-angel/p/4102918.html
Copyright © 2011-2022 走看看