xujiahui

1、XIB

2、Fram

3、屏幕比例适配(个人比较推荐)  iOS屏幕适配(尺寸适配)

4、NSLayoutConstraint、

5、Masonry 

 

 

概述

 

使用 Objective-C 纯代码编写 AutoLayout,看 AutoLayout 的字面理解就是自动布局,听起来好像蛮屌的样子。说白了就是适配:适应、兼容各种不同的情况,包括不同版本的操作系统的适配(系统适配)和不同屏幕尺寸的适配(屏幕适配)。

 

在 Storyboard 中,AutoLayout 有以下 3 个常用面板:

 

1.Align(对齐)

 

 

2.Pin(相对)

 

 

3.Resolve Auto Layout Issues(约束处理)

 

 

在 Storyboard 中实现 AutoLayout 我就不在本文讲解,因为讲了就是违背了不忘初心,方得始终的标题了。

 

 

Talk is cheap, show me the code

 

先说一下用代码实现 AutoLayout 步骤,别眨眼:

 

  1. 利用 NSLayoutConstraint 类创建具体的约束对象;

  2. 添加约束对象到相应的 view 上,代码有这两种:

 

(void)addConstraint:(NSLayoutConstraint *)constraint;

(void)addConstraints:(NSArray *)constraints;

 

或许有人问了,原来才两个步骤就可以了,我刚刚裤子都脱了,你就给我看这个?!

 

话不多说,马上 show you the code !

 

先看看我们使用 frame 的方式是如何确定一个 view 的位置的:

 

(void)viewDidLoad {

    [super viewDidLoad];

    self.title = @"使用 frame 的方式";

    UIView *purpleView = [[UIView alloc] initWithFrame:CGRectMake(100, 200, 150, 150)];

    purpleView.backgroundColor = [UIColor purpleColor];

    [self.view addSubview:purpleView];

}

 

代码很简单,运行效果如下:

 

 

再来看看 AutoLayout 的实现:

 

/**
 Layout约束
 toItem 对象
  attribute 属性
 relatedBy:有关系的
 toItem。参照对象
  multiplier 0.0 乘数一般为 0。0
  constant 数值
 */

-(void)AutoLayout{
    
    
    UIView * layout = [[UIView alloc] init];
    
    layout.backgroundColor = [UIColor brownColor];
    
    layout.translatesAutoresizingMaskIntoConstraints = NO;
    
    [self.view addSubview:layout];
    
    
    //添加with。约束
   
    NSLayoutConstraint * withconstraint = [NSLayoutConstraint constraintWithItem:layout attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:150];
    
    [layout addConstraint:withconstraint];
    
    //添加heght约束
    
    NSLayoutConstraint * heght = [NSLayoutConstraint constraintWithItem:layout attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:100];
    
    [layout addConstraint:heght];
    
    
    // 需要注意参数的不同,是天价到所在的view上的
        //添加left约束   又几个不同之处:设置对象。倍数为1。  添加约束是天价到所在试图
    
    NSLayoutConstraint * left = [NSLayoutConstraint constraintWithItem:layout attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:200];
    
    [self.view addConstraint:left];
    
    
    //添加一个top 就不用添加。right了
    
    NSLayoutConstraint * top = [NSLayoutConstraint constraintWithItem:layout attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:200];
    
    [self.view addConstraint:top];
    
    
    
    //添加right约束   其实添加一个top高度就可以了
    
   // NSLayoutConstraint * right = [NSLayoutConstraint constraintWithItem:layout attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:300];
    

    
}
View Code

 

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

 

总共有 7 个参数

分类:

技术点:

相关文章: