AutoLayout代码实现
首先设置:
translatesAutoresizingMaskIntoConstraints = NO;
如果是viewControl则AutoLayout适配写在
- (void)updateViewConstraints
如果是view则AutoLayout适配写在
- (void)updateConstraints
实际上,这也正是AutoLayout好处之一,可以集中将一个controller和view的适配在一个方法中。
AutoLayout语法主要分三类
1.设置size。先来看看UIView+AutoLayout的实现。
[ViewautoSetDimension:ALDimensionWidthtoSize:30];
UIView+AutoLayout底层原生的实现
NSLayoutConstraint *constraint = [NSLayoutConstraintconstraintWithItem:selfattribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nilattribute:NSLayoutAttributeNotAnAttributemultiplier:0.0fconstant:size];
[View addConstraint:constraint];
任何一个AutoLayout语法都是通过创建一个NSLayoutConstraint约束对象添加到view的约束中去的。 创建一个AutoLayout需要七个参数,他们分别是:
- WithItem:被约束对象
- 第一个attribute:被约束对象的关系
- relatedBy:约束描述
- toItem:约束源
- 第二个attribute:约束源的关系
- multiplier:约束系数
- constant:约束常数
在官方的api中,对约束有一个计算公式
view1.attr1 = view2.attr2 * multiplier + constant
下面具体讲解参数在NSLayoutConstraint API中的对应属性。
typedefNS_ENUM(NSInteger, NSLayoutAttribute) {
NSLayoutAttributeLeft =1,
NSLayoutAttributeRight,
NSLayoutAttributeTop,
NSLayoutAttributeBottom,
NSLayoutAttributeLeading,
NSLayoutAttributeTrailing,
NSLayoutAttributeWidth,
NSLayoutAttributeHeight,
NSLayoutAttributeCenterX,
NSLayoutAttributeCenterY,
NSLayoutAttributeBaseline,
NSLayoutAttributeLastBaseline =NSLayoutAttributeBaseline,
NSLayoutAttributeFirstBaselineNS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeLeftMarginNS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeRightMarginNS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeTopMarginNS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeBottomMarginNS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeLeadingMarginNS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeTrailingMarginNS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeCenterXWithinMarginsNS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeCenterYWithinMarginsNS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeNotAnAttribute =0
};