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];
/**
常见约束的常用方法
@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_equalTo和equalTo
默认情况下
mas_equalTo有自动包装功能,比如自动将20包装为@20
equalTo没有自动包装功能
如果添加了下面的宏,那么mas_equalTo和equalTo就没有区别
#define MAS_SHORTHAND_GLOBALS
注意:这个宏一定要添加到#import "Masonry.h"前面
mas_width和width
默认情况下
width是make对象的一个属性,用来添加宽度约束用的,表示对宽度进行约束
mas_width是一个属性值,用来当做equalTo的参数,表示某个控件的宽度属性
如果添加了下面的宏,mas_width也可以写成width
#define MAS_SHORTHAND
mas_height、mas_centerX以此类推
基于Autolayout的动画
在修改了约束之后,只要执行下面代码,就能做动画效果
[UIView animateWithDuration:1.0 animations:^{
[添加了约束的view layoutIfNeeded]; (强制自动布局)
}];