Auto Layout是iOS6发布后引入的一个全新的布局特性,弥补了以往autoresizing在布局方面的不足之处,适应更多屏幕尺寸的页面布局。下面就来说说自动布局的几种方式吧:

1.代码的方式(有两种形式)

 1.1常规的约束方式

     缺点:代码冗长

     优点:能实现所有的约束方式以及特殊的约束方式

     常用的方法是:

    +(instancetype)constraintWithItem:(id)view1

                            attribute:(NSLayoutAttribute)attr1 

                            relatedBy:(NSLayoutRelation)relation 

                               toItem:(id)view2 

                            attribute:NSLayoutAttribute)attr2 

                           multiplier:(CGFloat)multiplier 

                             constant:(CGFloat)c;

   

      1)view1:被约束的view

      2)attr1:被约束的view的属性,例如:NSLayoutAttributeHeight(view的高度)

      3)relation:被约束的view和相对于参照的view2的关系,例如NSLayoutRelationEqual(=)

      4)attr2:参照的view2的属性,属性同atttr1

      5)multiplier:被约束的view的指定属性是参照的view2制定属性的多少倍,公式:

                       view1.attr1 [= , >= , <=] view2.attr2 * multiplier + c;

      6)c:参数

      参考代码如下:

 

ios开发 masonry 布局高度 ios布局技术_ios开发 masonry 布局高度

 

ios开发 masonry 布局高度 ios布局技术_ios开发 masonry 布局高度_02

 1.2可视化格式语言

     缺点:不能满足所有的约束

     优点:一次性可创建多个约束,容易理解,但是需要开发人员熟悉这种语言的规则

          常用的方法是:


NSArray *)constraintsWithVisualFormat:(NSString

NSLayoutFormatOptions)opts 

NSDictionary

NSDictionary *)views;

     参数说明:

     1)format:约束语句

     2)opts:约束属性(例如:对齐功能)

     3)metrics:参数

     4)views:参与约束的字典对象

     下面给大家说一下约束语句的组成及写法:

     符号组成:

     V: (表示垂直)

     H: (表示水平)

     |   (父视图)

     -   (距离)

     >=  <=  == (间距大于等于)

     常用的语句:

     1.|-[view]-|  : 视图处在父视图的左右边缘内

     2.|-[view]    :  视图处在父视图的左边缘

     3.|[view]     : 视图和父视图左边对齐

     4.-[view]-    :  设置视图的width和height

     5.|-20.0-[view]-30.0-|  :  离父视图左边缘20,右边缘30

     6.[view(100.0)]            :  视图的宽度为100

     7.|-[view(view1)]-[view1]-|   :   视图宽度一样,并且在父视图左右边缘内

     8.V:|-[view(100.0)]    :   视图高度为100

     9.[view(>=100@300)]  :   视图的宽度最少为100,最大为300

    10.V:|-(==space)-[view1]->=0-[view2]-(==space)-|  :  离父视图的距离为space,view1和view2的间距大于                                                                    0并且距离底部父视图space

    注意:未标明方向时,默认为水平方向

    因为本人不用这种布局方式,所以就不给大家列举代码了,了解下就可以了,毕竟现在追求的是尽量少代码高效率,小伙伴们期待我更新xib自动布局吧,嘿嘿,希望大家多多提建议哈,一起进步。











view1.attr1 [= , >= , <=] view2.attr2 * multiplier + c;