代码实现的autolayout
- translatesAutoresizingMaskIntoConstraints = false
- By default, the autoresizing mask on a view gives rise to constraints that fully determine the view's position. This allows the auto layout system to track the frames of views whose layout is controlled manually (through -setFrame:, for example).
- When you elect to position the view using auto layout by adding your own constraints, you must set this property to NO. IB will do this for you.
- the autoresizing mask 已经默认给视图添加了使其位置确定的约束。并且允许自动布局系统追踪通过手动设置约束的视图的frame(比如通过
-setFrame:
)
- 当你需要通过自己添加约束来使用自动布局的时候,必须设置此属性为 NO,通过IB脱线来设置约束时,系统已经默认设置了此属性为NO
原生autolayout 代码示例
- (void)viewDidLoad {
[super viewDidLoad];
// 1.创建第一个蓝色的view
UIView *blueView = [[UIView alloc]init];
blueView.backgroundColor = [UIColor blueColor];
[self.view addSubview:blueView];
// 2.创建第二个红色的view
UIView *redView = [[UIView alloc]init];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView];
// 3.设置红色和蓝色view的约束
// 3.1去掉automasking
self.view.translatesAutoresizingMaskIntoConstraints = NO;
blueView.translatesAutoresizingMaskIntoConstraints = NO;
redView.translatesAutoresizingMaskIntoConstraints = NO;
// constraintWithItem表示的控件的attribute属性relatedBy(等于)toItem(这个控件)attribute(某一个属性)multiplier(乘以某一个值)constant(加上一个间距)
NSLayoutConstraint *blueConsgtraint1 = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:20];
NSLayoutConstraint *blueConsgtraint2 = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:20];
NSLayoutConstraint *blueConsgtraint3 = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:-20];
NSLayoutConstraint *blueConsgtraint4 = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:40];
// 4.添加约束(blueView)
[self.view addConstraint:blueConsgtraint1];
[self.view addConstraint:blueConsgtraint2];
[self.view addConstraint:blueConsgtraint3];
[blueView addConstraint:blueConsgtraint4];
// 5.给红色视图添加约束
NSLayoutConstraint *redContraint1 = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:20];
NSLayoutConstraint *redContraint2 = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0];
NSLayoutConstraint *redContraint3 = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0];
NSLayoutConstraint *redContraint4 = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
// 添加约束
[self.view addConstraints:@[redContraint1,redContraint2,redContraint3,redContraint4]];
}
网友评论