iOS屏幕适配

2019-02-25  本文已影响0人  程一刀

1.根据屏幕宽高写控件frame
2.Autoresizing的使用,适用于父子布局

/**
 UIViewAutoresizingNone
 不会随父视图的改变而改变
 UIViewAutoresizingFlexibleLeftMargin
 自动调整view与父视图左边距,以保证右边距不变
 UIViewAutoresizingFlexibleWidth
 自动调整view的宽度,保证左边距和右边距不变
 UIViewAutoresizingFlexibleRightMargin
 自动调整view与父视图右边距,以保证左边距不变
 UIViewAutoresizingFlexibleTopMargin
 自动调整view与父视图上边距,以保证下边距不变
 UIViewAutoresizingFlexibleHeight
  自动调整view的高度,以保证上边距和下边距不变
 UIViewAutoresizingFlexibleBottomMargin
 自动调整view与父视图的下边距,以保证上边距不变
 **/
-(void)testAutoresizing{
    //    1.创建蓝色的视图
    UIView *blueView = [[UIView alloc]init];
    blueView.frame =  CGRectMake(0, 0, 200, 200);
    blueView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:blueView];
    self.blueView = blueView;
    //    2.创建红色的视图
    UIView *redView = [[UIView alloc]init];
    CGFloat redViewH = 30;
    redView.frame = CGRectMake(0, 50, 200, 100);
    redView.backgroundColor = [UIColor redColor];
    [blueView addSubview:redView];
    redView.autoresizingMask = UIViewAutoresizingFlexibleHeight;//UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin;
}

3.AutoLayout的使用

#pragma mark AutoLayout 使用
-(void)autolayoutTest{
    //    创建一个蓝色的View视图
    UIView*blueView=[[UIView alloc]init];
    blueView.backgroundColor=[UIColor  blueColor];
    [self.view addSubview:blueView];
    
    //去掉所以可能添加约束的控件的autoresizing属性
    self.view.translatesAutoresizingMaskIntoConstraints=NO;
    blueView.translatesAutoresizingMaskIntoConstraints=NO;
    
    //设置left
    NSLayoutConstraint *leftBlue=[NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:20];
    //设置right
    NSLayoutConstraint *rightBlue=[NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:-20];
    //设置top
    NSLayoutConstraint *topBlue=[NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:30];
    //设置height
    NSLayoutConstraint *heighBlue=[NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:30];
    //添加到对应参照控件上
    [self.view addConstraints:@[leftBlue,rightBlue,topBlue]];
    [blueView addConstraint:heighBlue];
//
    //红色view
    UIView *redView = [UIView new];
    redView.backgroundColor = [UIColor redColor];
    redView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addSubview:redView];
    //设置left
    NSLayoutConstraint *leftBlue1=[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:20];
    //设置right
    NSLayoutConstraint *rightBlue1=[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:-20];
    //设置top
    NSLayoutConstraint *topBlue1=[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeTop multiplier:2.0 constant:0];
    //设置height
    NSLayoutConstraint *heighBlue1=[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:30];
    //添加到对应参照控件上
    [self.view addConstraints:@[leftBlue1,rightBlue1,topBlue1]];
    [redView addConstraint:heighBlue1];
}

4.Masonry使用
mas_makeConstraints 是给view添加约束,约束有几种,分别是边距,宽,高,左上右下距离,基准线。添加过约束后可以有修正,修正有offset(位移)修正和multipliedBy(倍率)修正。
语法一般是 make.equalTo or make.greaterThanOrEqualTo or make.lessThanOrEqualTo + 倍数和位移修正。
注意点1: 使用 mas_makeConstraints方法的元素必须事先添加到父元素的中,例如[self.view addSubview:view];
注意点2: masequalTo 和 equalTo 区别:masequalTo 比equalTo多了类型转换操作,一般来说,大多数时候两个方法都是 通用的,但是对于数值元素使用mas_equalTo。对于对象或是多个属性的处理,使用equalTo。特别是多个属性时,必须使用equalTo,例如 make.left.and.right.equalTo(self.view);
注意点3: 注意到方法with和and,这连个方法其实没有做任何操作,方法只是返回对象本身,这这个方法的左右完全是为了方法写的时候的可读性 。make.left.and.right.equalTo(self.view);和make.left.right.equalTo(self.view);是完全一样的,但是明显的加了and方法的语句可读性 更好点。

    UIView *greenView = UIView.new;
    greenView.backgroundColor = UIColor.greenColor;
    greenView.layer.borderColor = UIColor.blackColor.CGColor;
    greenView.layer.borderWidth = 2;
    [self addSubview:greenView];

    UIView *redView = UIView.new;
    redView.backgroundColor = UIColor.redColor;
    redView.layer.borderColor = UIColor.blackColor.CGColor;
    redView.layer.borderWidth = 2;
    [self addSubview:redView];

    UIView *blueView = UIView.new;
    blueView.backgroundColor = UIColor.blueColor;
    blueView.layer.borderColor = UIColor.blackColor.CGColor;
    blueView.layer.borderWidth = 2;
    [self addSubview:blueView];

    UIView *superview = self;
    int padding = 10;

    //if you want to use Masonry without the mas_ prefix
    //define MAS_SHORTHAND before importing Masonry.h see Masonry iOS Examples-Prefix.pch
    [greenView makeConstraints:^(MASConstraintMaker *make) {
        make.top.greaterThanOrEqualTo(superview.top).offset(padding);
        make.left.equalTo(superview.left).offset(padding);
        make.bottom.equalTo(blueView.top).offset(-padding);
        make.right.equalTo(redView.left).offset(-padding);
        make.width.equalTo(redView.width);

        make.height.equalTo(redView.height);
        make.height.equalTo(blueView.height);

    }];

    //with is semantic and option
    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(superview.mas_top).with.offset(padding); //with with
        make.left.equalTo(greenView.mas_right).offset(padding); //without with
        make.bottom.equalTo(blueView.mas_top).offset(-padding);
        make.right.equalTo(superview.mas_right).offset(-padding);
        make.width.equalTo(greenView.mas_width);

        make.height.equalTo(@[greenView, blueView]); //can pass array of views
    }];

    [blueView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(greenView.mas_bottom).offset(padding);
        make.left.equalTo(superview.mas_left).offset(padding);
        make.bottom.equalTo(superview.mas_bottom).offset(-padding);
        make.right.equalTo(superview.mas_right).offset(-padding);
        make.height.equalTo(@[greenView.mas_height, redView.mas_height]); //can pass array of attributes
    }];

抄袭链接:https://www.cnblogs.com/GarveyCalvin/p/4165151.html

上一篇下一篇

猜你喜欢

热点阅读