代码实现Autolayout

xib添加Autolayout约束:



利用代码实现Autolayout的步骤

利用NSLayoutConstraint类创建具体的约束对象:添加约束对象到对应的view上

//要约束的view

    UIView * testView = [[UIView alloc]init];

    

    

    NSLayoutConstraint * constraint = [NSLayoutConstraint constraintWithItem:testView attribute:(NSLayoutAttributeRight) relatedBy:(NSLayoutRelationEqual) toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:-20];

    

    [self.view addConstraint:constraint];


一个NSLayoutConstraint类 创建约束的常用方法为:

/**

 常见约束的常用方法


 @param view1 需要约束的UI对象

 @param attr1 约束类型(要做什么约束)

 @param relation 与参照控件之间的关系

 @param view2 参照的控件

 @param attr2 约束类型(要做什么约束)

 @param multiplier 乘数(倍率)

 @param c 常数

 @return 返回类型

 */

+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;


注意:要用代码实现layout功能,必须先禁止autoresizing功能,不设置则不能实现。

 self.view.translatesAutoresizingMaskIntoConstraints = NO;


自动布局第三方类库:(我常用的)

Masonry

目前最流行的Autolayout第三方框架

用优雅的代码方式编写Autolayout

省去了苹果官方恶心的Autolayout代码

大大提高了开发效率

 

框架地址:

https://github.com/SnapKit/Masonry

mas_equalToequalTo

默认情况下

mas_equalTo有自动包装功能,比如自动将20包装为@20

equalTo没有自动包装功能

 

如果添加了下面的宏,那么mas_equalToequalTo就没有区别

#define MAS_SHORTHAND_GLOBALS

注意:这个宏一定要添加到#import "Masonry.h"前面

mas_widthwidth

默认情况下

widthmake对象的一个属性,用来添加宽度约束用的,表示对宽度进行约束

mas_width是一个属性值,用来当做equalTo的参数,表示某个控件的宽度属性

 

如果添加了下面的宏,mas_width也可以写成width

#define MAS_SHORTHAND

 

mas_heightmas_centerX以此类推


 基于Autolayout的动画

在修改了约束之后,只要执行下面代码,就能做动画效果

[UIView animateWithDuration:1.0 animations:^{

    [添加了约束的view layoutIfNeeded]; (强制自动布局)

}];





你可能感兴趣的:(新手)