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
};

results matching ""

    No results matching ""