【iOS】屏幕适配

作者: 亲爱的大倩倩 | 来源:发表于2016-07-07 15:40 被阅读1056次

    适配方案

    • 手码适配
      手码写控件的时候用此方法适配
      根据当前屏幕宽高,其他控件坐标及宽高等进行适配
    //获取屏幕的宽高
    #define ScreenWidth [UIScreen mainScreen].bounds.size.width
    #define ScreenHeight [UIScreen mainScreen].bounds.size.height
    

    示例:
    labelOne根据当前屏幕宽高适配
    labelTwo根据labelOne坐标及宽高进行适配

        UILabel *labelOne = [[UILabel alloc] initWithFrame:CGRectMake(ScreenWidth/2 - 20, 20, 40, 40)];
        labelOne.backgroundColor = [UIColor yellowColor];
        [self.view addSubview:labelOne];
        
        UILabel *labelTwo = [[UILabel alloc] initWithFrame:CGRectMake(labelOne.frame.origin.x, labelOne.frame.origin.y + labelOne.frame.size.height + 10, labelOne.frame.size.width, labelOne.frame.size.height)];
        labelTwo.backgroundColor = [UIColor greenColor];
        [self.view addSubview:labelTwo];
    

    效果图:

    78AA851F-9710-447C-9A52-C6446788DD40.png
    • AutoResizing
      AutoLayout之前的适配方法,现在不常用了
      在view的autoresizesSubviews属性为YES时(默认为YES), AutoResizing才会生效
      因为从Xcode6开始,storyboard&xib默认是自动布局,所以需要手动调整,才能使用AutoResizing,按下图所示,将AutoLayout和SizeClasses取消勾选
    BD1741E0-311A-421C-A9F7-A08313C8B750.png

    示例:
    在view上添加textField,根据屏幕宽度自动伸缩,左右距离屏幕均为20
    1-根据当前view的尺寸(宽375,高667),将textField添加在正确位置

    7F0B21A8-598B-494A-987F-88542920D826.png

    2-方框内的横竖为textField的宽高是否缩放,方框外的上下左右为距离父视图的距离

    DEDB62C4-0815-4FE3-86E3-EB03F644D657.png

    效果图:

    A2C5379E-746E-4B2A-AA14-ED3F2F7D1CC6.png

    如果只设置了上边距和右边距,则运行结果为:

    C89268DA-2BC5-4027-9DBE-9FA1B5B1FA30.png
    • AutoLayout
    直接约束

    简单易用,最爱!只需要给每一个控件设置好唯一位置即可!
    下图暗色部分,为设置两个控件坐标时使用
    下图最下面两行,为屏幕宽高居中

    384916D6-D79D-40DB-B8AB-145030CB809E.png

    下图为设置某一控件上下左右距离及自身宽高

    8876192B-963C-4126-916B-9F37A40335D4.png

    注意:此两种配合使用时,很可能出现设置重复,在下图中查看,将重复的删除即可(点中某一行,直接delete)

    D16E789F-88AF-40A9-9E73-47C5DD2D614E.png

    快捷键:
    command+option+"=" 将控件移动到适配后的位置

    VFL语言约束

    仅了解一点,没怎么用过

        UIButton *button=[[UIButton alloc]init];
        [button setTitle:@"VFL约束" forState:UIControlStateNormal];
        button.translatesAutoresizingMaskIntoConstraints=NO;
        [button setBackgroundColor:[UIColor blackColor]];
        [self.view addSubview:button];
        NSArray *constraints1=[NSLayoutConstraint
                               constraintsWithVisualFormat:@"H:|-[button]-|"
                               options:0
                               metrics:nil
                               views:NSDictionaryOfVariableBindings(button)];
        NSArray *constraints2=[NSLayoutConstraint
                               constraintsWithVisualFormat:@"V:|-20-[button(==30)]"
                               options:0
                               metrics:nil
                               views:NSDictionaryOfVariableBindings(button)];
        [self.view addConstraints:constraints1];  
        [self.view addConstraints:constraints2];
    

    效果图:

    6C6CA8CD-53F7-4117-8C1C-3D930A4F858F.png

    -** SizeClasses**
    iOS8之后新增的特性,将屏幕分成不同的抽象概念,具体还未使用过

    相关文章

      网友评论

        本文标题:【iOS】屏幕适配

        本文链接:https://www.haomeiwen.com/subject/rjhljttx.html