主要步驟:
- 利用
NSLayoutConstraint
類建立具體的限制對象
一個
對象就代表一個限制,建立限制對象的常用方法:NSlayoutConstraint
自動布局的核心公式+(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c; //view1:要限制的控件 //attr1:限制的類型(做怎樣的限制) //relation:與參照控件之間的關系 //view2:參照的控件 //attr2:限制的類型(做怎樣的限制) //multiplier:乘數 //c:常量
obj1.property1 = (obj2.property2 * multiplier) + constant value
- 添加限制對象到對應的view上
-(void)addConstraint:(NSLayoutConstranit *) constraint; -(void)addConstraints:(NSArray *)constraints;
代碼實作Autolayout的注意點
- 要先禁止autoresizing功能,設定view的下面屬性為NO
view.translatesAutoresizingMaskIntoConstraints = NO;
- 添加限制之前,一定要保證相關控件都已經在各自的父控件上
- 不用再給view設定frame
通過Autolayout實作動畫
通過修改限制的值,可以實作控件的變化,但直接将修改限制值的代碼放在動畫方法中是無法實作動畫的,因為限制修改後view并不會立即重新布局,隻有在動畫中手動調用
layoutIfNeeded
方法進行重新布局才能實作動畫效果
//先修改限制的值
//然後執行以下代碼實作動畫效果
[UIView animateWithDuration:1.0 animations:^{
[添加了限制的view layoutIfNeeded];
}];
NSLayoutConstraint對象的屬性主要有以下幾種
@property (nullable, readonly, assign) id firstItem;
@property (readonly) NSLayoutAttribute firstAttribute;
@property (nullable, readonly, assign) id secondItem;
@property (readonly) NSLayoutAttribute secondAttribute;
@property (readonly, copy) NSLayoutAnchor *firstAnchor NS_AVAILABLE(10_12, 10_0);
@property (readonly, copy, nullable) NSLayoutAnchor *secondAnchor NS_AVAILABLE(10_12, 10_0);
@property (readonly) NSLayoutRelation relation;
@property (readonly) CGFloat multiplier;
@property CGFloat constant;
@property (getter=isActive) BOOL active;