IOS开发之——屏幕适配-AutoLayout代码实现(03)

一 概述

  • 用代码实现AutoLayout的步骤过程
  • AutoLayout约束规则
  • AutoLayout约束示例

二 用代码实现AutoLayout的过程

2.1 实现AutoLayout的过程

  • 通过代码创建要进行AutoLayout约束的View
  • View.translatesAutoresizingMaskIntoConstraints=NO;
  • 根据逻辑添加约束方法:constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1…
  • 添加约束对象到相应的view上

2.2 方法说明

创建约束对象的常用方法
+(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

说明:

  • view1 :要约束的控件
  • attr1 :约束的类型(做怎样的约束)
  • relation :与参照控件之间的关系
  • view2 :参照的控件
  • attr2 :约束的类型(做怎样的约束)
  • multiplier :乘数
  • c :常量

自动布局有个核心公式:obj1.property1 =(obj2.property2 * multiplier)+ constant value

添加约束对象到相应的view上
- (void)addConstraint:(NSLayoutConstraint *)constraint;
- (void)addConstraints:(NSArray *)constraints;
注意点
  • 要先禁止autoresizing功能,设置view的下面属性为NO view.translatesAutoresizingMaskIntoConstraints = NO;
  • 添加约束之前,一定要保证相关控件都已经在各自的父控件上
  • 不用再给view设置frame

三 AutoLayout约束规则

在创建约束之后,需要将其添加到作用的view上

在添加时要注意目标view需要遵循以下规则:

3.1 对于两个同层级view之间的约束关系,添加到它们的父view上

3.2 对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上

3.3 对于有层次关系的两个view之间的约束关系,添加到层次较高的父view上

四 AutoLayout约束示例

4.1 代码

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
  
    //1-添加两个控件到父空间上
    //1.1-蓝色View
    UIView *blueView=[[UIView alloc]init];
    blueView.backgroundColor=[UIColor blueColor];
    [self.view addSubview:blueView];
    blueView.translatesAutoresizingMaskIntoConstraints=NO;
    
    //1.2-红色View
    UIView *redView=[[UIView alloc]init];
    redView.backgroundColor=[UIColor redColor];
    [self.view addSubview:redView];
    redView.translatesAutoresizingMaskIntoConstraints=NO;
    
    //2-添加约束

    /*
     * @Item:==first item,需要约束的条件
     * @attribute:需要设置的约束
     * @relatedBy==relation,等于
     * @toItem=second item,被参考的控件
     * @attribute:需要设置的约束
     * @multiplier:乘以
     * @constant:加上
     */
    //2.1 添加蓝色View距离父控件左边距固定为20--蓝色View的左边等于父控件的左边*1.0+20
    NSLayoutConstraint *blueViewLeft= [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:20];
    [self.view addConstraint:blueViewLeft];
    
    //2.2 添加蓝色View距离父控件右边距固定为20,--蓝色View的右边等于父控件的右边*1.0-20
    NSLayoutConstraint *blueViewRight= [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:-20];
    [self.view addConstraint:blueViewRight];
    
    //2.3 添加蓝色View距离父控件上边距固定为20,--蓝色View的上边等于父控件的上边*1.0+20
    NSLayoutConstraint *blueViewTop= [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:20];
    [self.view addConstraint:blueViewTop];
    
    //2.4 添加蓝色View高度为50,--蓝色View的高度等于50
    NSLayoutConstraint *blueViewHeight= [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0 constant:50];
    [self.view addConstraint:blueViewHeight];
    
    //3-设置红色View
    //3.1 红色View的高度和蓝色View的高度一样 高度--红色View的高度等于红色View的高度
    NSLayoutConstraint *redViewHeight= [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0];
    [self.view addConstraint:redViewHeight];
    
    //3.2 红色的右边和蓝色的右边对齐 x-红色View的右边等于红色View的右边
    NSLayoutConstraint *redViewRight= [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0];
    [self.view addConstraint:redViewRight];
    //3.3 红色的顶部和蓝色的地步距离固定 y-红色View的顶部等于红色View的底部+20
    NSLayoutConstraint *redViewTop= [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:20];
    [self.view addConstraint:redViewTop];
    //3.4 红色的宽度等于蓝色宽度的一般 宽度-红色View的宽度等于红色View的宽度*0.5
    NSLayoutConstraint *redViewWidth= [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeWidth multiplier:0.5 constant:0];
    [self.view addConstraint:redViewWidth];
       
}
@end

4.2 效果图

竖屏横屏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值