zoukankan      html  css  js  c++  java
  • Auto Layout Masonry

    1. Auto layout

       1.1 NSLayoutConstraint

          1.1.1 约束类 ios6.0可用 为了更好的适配各个尺寸

          1.1.2 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:

                生成一个约束,也就是给一个视图约束条件,另一个视图也会受到这个约束的影响

                参数依次为view1,attr1,=(>=,<=),view2,attr2,multiplier,constant

                view1.attr1 = view2.attr2 * multiplier + constant

          1.1.3 constraintsWithVisualFormat:options:metrics:views:

                俗称 VFT,它能生成一组约束(水平,垂直)

                https://www.cnblogs.com/gulong/p/4722806.html

          1.1.4 默认生成的约束条件的级别都是最高的1000 (级别范围 0-1000)

       1.2 translatesAutoresizingMaskIntoConstraints

          1.2.1 UIView的一个属性,

          1.2.2 若想约束生效必须设置为YES,此时frame将不会生效

       1.3 约束一般一组是4个(上下,左右,宽高),

           约束设置多,或者设置少都会出错,此时系统会帮忙处理以保证程序的运行,而且控制台也会打印出具体问题及解决方案。但是如果系统也帮不了你的时候,那就是一个闪退予以反抗。

    2. sizeToFit,sizeThatFits,intrinsicContentSize

       2.1 sizeToFit  手动调用改变宽高 可重写,需调用父类方法

       2.2 sizeThatFits 手动调用获取宽高 可重写,可调用父类方法获取上层更多资源

       2.3 intrinsicContentSize 手动调用无意义 可重写,类似默认生成宽高的约束但是级别都不高 <100

    @implementation GLLabel
    
    
    //-(void)sizeToFit{
    
    //    [super sizeToFit];
    
    //}
    
    //
    
    //-(CGSize)sizeThatFits:(CGSize)size{
    
    //    return CGSizeMake(120, 20);
    
    //}
    
    //
    
    - (CGSize)intrinsicContentSize{
    
        //手动改变后 需要调用invalidateIntrinsicContentSize
    
        return CGSizeMake(80, 80);
    
    }
    
    
    @end

    3. Masonry

       3.1 轻量级的自动布局SDK,采用了链式编程的方式简化了代码量 他不仅支持iOS还支持MAC OS X的开发

           可下载代码放入代码中,或直接pod install

           最后还是调用constraintWithItem:attribute:relatedBy:

                     toItem:attribute:multiplier:constant:的方法添加的约束

           内部很多枚举都是重写的NSLayoutConstraint的枚举,属于一一对应的

           为了配合英语语法有一些增强读法的方法,b看来应该会更舒服一点吧(with,and)

             a. make.top.left.right.bottom.offset(20)

             b. make.top.left.right.and.bottom.offset(20)

       3.2 重要类

           MASConstraintMaker     引擎类

           MASConstraint          约束抽象类,实现了部分方法

           MASViewConstraint      视图约束类,所有方法均已实现

           MASCompositeConstraint 组合约束类,内部childConstraints为数组,模型为MASViewConstraint

           UIView的分类            View+MASAdditions中,简便我们的调用

       3.3 具体使用

          3.3.1 demo

            [label1 mas_makeConstraints:^(MASConstraintMaker *make) {

                make.left.offset(20);

                make.top.bottom.right.offset(-50).priority(800);

            }];

          3.3.2 分析

            mas_makeConstraints 为View的分类方法block中会返回约束引擎

            make.left 会生成MASViewConstraint对象并被make所持有,并返回该对象

               make.left.offset 会将MASViewConstraint的对象的约束constant值该为20

            make.right 会生成MASViewConstraint对象并被make所持有,并返回该对象

               make.top.bottom 会新生成两个对象(MASViewConstraint对象 & MASCompositeConstraint对象)

                               MASCompositeConstraint 并且将right和bottom放入childs的数组中

                               返回MASCompositeConstraint对象

               make.top.bottom.right 会新生成一个MASViewConstraint对象,

                                     绑定到MASCompositeConstraint对象上

                                     重新返回MASCompositeConstraint对象

               make.top.bottom.right.offset 给MASCompositeConstraint的对象的constant设置值为-50

                                            后续将childs的MASViewConstraint对象都设置-50这个值

               make.top.bottom.right.offset(-50).priority(800)  虐

            当block执行完之后,引擎make将会执行install装载方法依次执行组合约束的install装载方法后再执行视图约束的install装载方法,最后执行生成约束的方法,至此完毕

    4. 番外

       4.1 setContentCompressionResistancePriority:forAxis:

           默认优先级为750    抗压缩

       4.2 setContentHuggingPriority:forAxis:

           默认优先级为250    抗拉伸

       4.3 云教学中有使用例子

           个人信息主页,会员图标紧随个人名字,名字过长会把图标挤到屏幕外

           名字label的约束 Compression(默认750)< right(赋值800)<Hugging(重置为900)

  • 相关阅读:
    换个格式输出整数
    c++入门构造函数
    接口继承与实现
    spring mvc 之@requestmapping
    RabbitMQ
    Socket通信原理
    TCP三次握手与四次挥手
    WIN 10家庭版没有Hyper-V
    aop 切面demo
    JVM之旅------jvm内存模型
  • 原文地址:https://www.cnblogs.com/gulong/p/9482462.html
Copyright © 2011-2022 走看看