代码加约束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更简单明了,生动直观)

[OC] autoLayout 博客文档

AutoLayout经常用到的一些布局(含StackView)

iOS 在xib或者storyboard中添加AutoLayout后,在代码中修改AutoLayout约束条件

UIScrollView AutoLayout

代码中设置的约束是不是会覆盖使用 AutoLayout 和 SizeClasses 创建的约束?