【iOS】AutoLayout基础篇

2015-11-04  本文已影响0人  cod_mm

AutoLayout是iOS6开始引入的一种布局技术,专门用来做UI界面布局的。用来解决Frame布局在多屏幕尺寸适配不足的问题。

一个NSLayoutConstraint 对象就是一条约,约束的创建有2种方法。

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

函数的对照公式为: view1.attr1 <relation> view2.attr2 * multiplier + constant
注意:如果约束不需要第4个参数(view2),将它设为nil,第五个参数(attr2)设为NSLayoutAttributeNotAnAttribute

参数
view1 要进行约束的view
attr1 View1要约束的属性
relation 相对于目标view(view2)的约束关系
view2 view1约束的参照物
attr2 view2作为参照的属性
multiplier 指定一个与view2属性相乘的乘数multiplier
c 指定一个与(view2属性 * multiplier 后)相加的浮点数constant
// 红色View设置自身的宽高为100,相对于父组件居中
UIView *redView = [[UIView alloc] init];
[redView setBackgroundColor:[UIColor redColor]];
[self.view addSubview:redView];

//使用Auto Layout约束,禁止将Autoresizing Mask转换为约束
[redView setTranslatesAutoresizingMaskIntoConstraints:NO];
NSLayoutConstraint *xConstraint = [NSLayoutConstraint constraintWithItem:redView
                                                               attribute:NSLayoutAttributeCenterX
                                                               relatedBy:NSLayoutRelationEqual
                                                                  toItem:self.view
                                                               attribute:NSLayoutAttributeCenterX
                                                              multiplier:1.0
                                                                constant:0];

NSLayoutConstraint *yConstraint = [NSLayoutConstraint constraintWithItem:redView
                                                               attribute:NSLayoutAttributeCenterY
                                                               relatedBy:NSLayoutRelationEqual
                                                                  toItem:self.view
                                                               attribute:NSLayoutAttributeCenterY
                                                              multiplier:1.0
                                                                constant:0];

NSLayoutConstraint *wConstraint = [NSLayoutConstraint constraintWithItem:redView
                                                               attribute:NSLayoutAttributeWidth
                                                               relatedBy:NSLayoutRelationGreaterThanOrEqual
                                                                  toItem:nil
                                                               attribute:NSLayoutAttributeNotAnAttribute
                                                              multiplier:1.0
                                                                constant:100];

NSLayoutConstraint *hConstraint = [NSLayoutConstraint constraintWithItem:redView
                                                               attribute:NSLayoutAttributeHeight
                                                               relatedBy:NSLayoutRelationGreaterThanOrEqual
                                                                  toItem:nil
                                                               attribute:NSLayoutAttributeNotAnAttribute
                                                              multiplier:1.0
                                                                constant:100];

NSArray *array = [NSArray arrayWithObjects:xConstraint, yConstraint, wConstraint, hConstraint, nil];
[self.view addConstraints:array];
效果图
上一篇下一篇

猜你喜欢

热点阅读