代码加约束Autolayout及Autoresizing的使用及介绍
Posted zlj_jeck
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码加约束Autolayout及Autoresizing的使用及介绍相关的知识,希望对你有一定的参考价值。
前言:
这里只是简单介绍他俩的使用方法,大家了解一下就行了,小编并不太推荐这两种加约束的方法,原因就是Autoresizing逻辑比较绕,而且面对复杂的界面,约束起来比较吃力,而Autolayout功能虽然强大,但用代码加约束的话代码比较繁琐,代码量也较大(以上观点大神们请无视,仅代表个人观点).个人比较推荐使用Masonry(http://blog.csdn.net/zlj_jeck/article/details/51453299)或者VFL语法(http://blog.csdn.net/zlj_jeck/article/details/51459855)来加约束,有兴趣的小伙伴们点连接进去看就好了,我都做了详细介绍,并上传了demo至GitHub,至于他们的优劣还是自己来对比吧,下面进入正题:
首先是Autolayout的使用
- (void)viewDidLoad
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
//这里不需要给frame
UIView *subView = [[UIView alloc] initWithFrame:CGRectZero];
subView.backgroundColor = [UIColor redColor];
[self.view addSubview:subView];
//关闭Autoresizing
[subView setTranslatesAutoresizingMaskIntoConstraints:NO];
//添加单个约束
//语法格式
// view1.attribute1 = view2.attribute2 * multiplier + constant
//例如:
//subView.top = self.view.top*1+20
NSLayoutConstraint *topConstrait = [NSLayoutConstraint constraintWithItem:subView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTop
multiplier:1
constant:20];
//subView.left = self.view.left*1+20
NSLayoutConstraint *leftConstrait = [NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1 constant:20];
//固定宽度
//subView.width = 200
NSLayoutConstraint *widthConstrait = [NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:200];
//subView.height = 200
NSLayoutConstraint *heightConstrait = [NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:200];
//注意约束的添加位置
//将上边距和左边距的约束加在父视图即self.view上
[self.view addConstraints:@[topConstrait,leftConstrait]];
//将宽和高的约束添加到自身即subView上
[subView addConstraints:@[widthConstrait,heightConstrait]];
接下来是运行效果图
大家也看到了吧,就做出这么一个视图来,就需要这么多的代码,如果界面比较复杂有多个视图呢?看到这里小伙伴们应该明白了为什么我不推荐使用这个Autolayout来加约束了吧,但了解了解Autolayout的实现原理也不是什么坏事对吧.
接下来是Autoresizing的使用
UIViewAutoresizingNone就是不自动调整.
UIViewAutoresizingFlexibleLeftMargin 自动调整与superView左边的距离,保证与superView右边的距离不变。
UIViewAutoresizingFlexibleRightMargin 自动调整与superView的右边距离,保证与superView左边的距离不变。
UIViewAutoresizingFlexibleTopMargin 自动调整与superView顶部的距离,保证与superView底部的距离不变。
UIViewAutoresizingFlexibleBottomMargin 自动调整与superView底部的距离,也就是说,与superView顶部的距离不变。
UIViewAutoresizingFlexibleWidth 自动调整自己的宽度,保证与superView左边和右边的距离不变。
UIViewAutoresizingFlexibleHeight 自动调整自己的高度,保证与superView顶部和底部的距离不变。
//调用方法如下(其他方法用法类似,不做详解)
self.view.autoresizingMask = UIViewAutoresizingNone;
以上是关于代码加约束Autolayout及Autoresizing的使用及介绍的主要内容,如果未能解决你的问题,请参考以下文章
代码加约束VFL语法的详细使用介绍(代替Autolayout进行布局,比Autolayout更简单明了,生动直观)
AutoLayout经常用到的一些布局(含StackView)