iOS中的屏幕适配之Autolayout(初级)

这是第二篇博客啦啦啦,来来来,嗨起来,今天我们要说的时iOS的屏幕适配,随着APPLE推出的手机越来越多,屏幕的尺寸也越来越多,而屏幕的适配确是相当的麻烦,今天我要说的,网上也许早就有了,我只是说出自己的理解(可能不对啊,勿喷....)

Autolayout其实就是约束了,今天讲得是代码添加约束,用到的第三方是Masonry,相信代码写约束的都知道这个第三方库,好了,废话不多说,代码搞起

首先你要去下载个Masonry,或者用cocoapods加到工程中,先来个简单点得例子啊,下面请重点看注释啊

UIView *view1 = [[UIView alloc] init];
    view1.backgroundColor = [UIColor blackColor];
    [self.view addSubview:view1];
    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        //使view1的中点坐标等于self.view的中点
        make.center.equalTo(self.view);
        //设置view1的size为宽度300,高度300,这里的mas_equalTo好像是设置具体数值用的,而equalTo却不是
        make.size.mas_equalTo(CGSizeMake(300, 300));
    }];

运行效果


可以看到横竖屏都是一样的,其实Autolayout学的好的话,只需要写一套代码就适配所以尺寸了,而且不怕APPLE后来在出其他尺寸,一劳永逸(就是代码特别烦)

现在来点复杂的,2块view,第一块view左边距离父视图20,第二块view右边距离父视图30,2块view等宽间隔为10

UIView *view1 = [[UIView alloc] init];
    view1.backgroundColor = [UIColor blackColor];
    [self.view addSubview:view1];

    UIView *view2 = [[UIView alloc] init];
    view2.backgroundColor = [UIColor cyanColor];
    [self.view addSubview:view2];

    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        //view1的左边距离self.view的左边距离为20
        make.left.equalTo(self.view.mas_left).offset(20);
        //view1的右边距离view2的左边距离为为-10,为什么是负数,其实是往右边是正,左边为负啦(我自己理解的啊),top和buttom也一样
        make.right.equalTo(view2.mas_left).offset(-10);
        //这句的意思就是view1的中点得Y值等于self.view的中点的Y值
        make.centerY.mas_equalTo(self.view.mas_centerY);
        //view1的高度是150,这里要用对象
        make.height.mas_equalTo(@150);
        //view1的宽度等于view2
        make.width.equalTo(view2);
    }];
    [view2 mas_makeConstraints:^(MASConstraintMaker *make) {
        //view2的左边距离view1的右边距离为10,其实就是间隔为10了
        make.left.equalTo(view1.mas_right).offset(10);
        //view2的右边距离self.view的右边距离为-30,自己脑补为什么是负的啊
        make.right.equalTo(self.view.mas_right).offset(-30);
        //这句的意思就是view2的中点得Y值等于self.view的中点的Y值
        make.centerY.mas_equalTo(self.view.mas_centerY);
        //view2的高度是150,这里要用对象
        make.height.mas_equalTo(@150);
        //view2的宽度等于view1
        make.width.equalTo(view1);
    }];

运行效果如下

是不是棒棒哒,我们再来写个3块view的,其中2块view的位置和上面一样,第三块view在第二块view的右边,距离为15,第三块view右边距离父视图距离为20,我希望小伙伴们自己试试,如果一遍就能敲出来所需要的效果的话,证明Masonry已经入门了

UIView *view1 = [[UIView alloc] init];
    view1.backgroundColor = [UIColor blackColor];
    [self.view addSubview:view1];

    UIView *view2 = [[UIView alloc] init];
    view2.backgroundColor = [UIColor cyanColor];
    [self.view addSubview:view2];

    UIView *view3 = [[UIView alloc] init];
    view3.backgroundColor = [UIColor redColor];
    [self.view addSubview:view3];

    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        //view1的左边距离self.view的左边距离为20
        make.left.equalTo(self.view.mas_left).offset(20);
        //view1的右边距离view2的左边距离为为-10,为什么是负数,其实是往右边是正,左边为负啦(我自己理解的啊),top和buttom也一样
        make.right.equalTo(view2.mas_left).offset(-10);
        //这句的意思就是view1的中点得Y值等于self.view的中点的Y值
        make.centerY.mas_equalTo(self.view.mas_centerY);
        //view1的高度是150,这里要用对象
        make.height.mas_equalTo(@150);
        //view1的宽度等于view2
        make.width.equalTo(view2);
    }];
    [view2 mas_makeConstraints:^(MASConstraintMaker *make) {
        //view2的左边距离view1的右边距离为10
        make.left.equalTo(view1.mas_right).offset(10);
        //view2的右边距离view3的右边距离为-15,自己脑补为什么是负的啊
        make.right.equalTo(view3.mas_left).offset(-15);
        //这句的意思就是view2的中点得Y值等于self.view的中点的Y值
        make.centerY.mas_equalTo(self.view.mas_centerY);
        //view2的高度是150,这里要用对象
        make.height.mas_equalTo(@150);
        //view2的宽度等于view3
        make.width.equalTo(view3);
    }];

    [view3 mas_makeConstraints:^(MASConstraintMaker *make) {
        //view3的左边距离view2的右边距离为15
        make.left.equalTo(view2.mas_right).offset(15);
        //view3的右边距离self.view的右边距离为-20,自己脑补为什么是负的啊
        make.right.equalTo(self.view.mas_right).offset(-20);
        //这句的意思就是view3的中点得Y值等于self.view的中点的Y值
        make.centerY.mas_equalTo(self.view.mas_centerY);
        //view3的高度是150,这里要用对象
        make.height.mas_equalTo(@150);
        //view3的宽度等于view1
        make.width.equalTo(view1);
    }];

运行效果

今天的博客就写到这里的,希望大家能够入门,暂时还没在项目中用这种约束,都是比例写的适配(其实效果不怎么好,但没有Autolayout这么麻烦),在以后的项目中试试Masonry写适配,其实这些都是我自己的理解,如果不对的话,欢迎指正,谢谢

时间: 2024-08-09 00:33:18

iOS中的屏幕适配之Autolayout(初级)的相关文章

QML 中的屏幕适配问题

QML 中的屏幕适配问题 其实 QML 中的屏幕适配问题,官方也写了一篇文章,如何在不同分辨率下适配控件大小和图片大小(字体好像没有讲到).虽然文章条理清晰,原理,案例都写得不错,但是总觉得缺点什么.对,就是代码,具体实现的代码.从头到尾,原理阐述清晰,唯独就是不写出具体的代码实现. 有人说,具体的代码实现可能很复杂.倒不至于,这里给出一段最简单的使用纯 QML 实现的 dp,至于 dpi 什么,管它呢. import QtQuick.Window 2.0 import QtQuick 2.5

iOS开发UI篇—屏幕适配autoResizing autoLayout和sizeClass图文详解

1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基本不用怎么适配布局,所有的ui控件只要相对父控件布局就可以了,没错autoResizing就是一个相对于父控件的布局解决方法:注意:它只能相对父控件布局:***在xcode中可以通过可视化的界面调整也可以通过代码去控制 在用autoResizing的时候需要关闭autoLayout和sizeclas

iOS 屏幕适配:autoResizing autoLayout和sizeClass

1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基本不用怎么适配布局,所有的ui控件只要相对父控件布局就可以了,没错autoResizing就是一个相对于父控件的布局解决方法:注意:它只能相对父控件布局:***在xcode中可以通过可视化的界面调整也可以通过代码去控制 在用autoResizing的时候需要关闭autoLayout和sizeclas

iOS设计中不同屏幕适配的方法-登陆界面

在iOS的手机界面设计中,由于不同手机类型的手机的尺寸不同,那么在设计手机界面时就得对屏幕进行适配,这里就以登陆界面的设计为例简单说明下 实现屏幕适配的方法:(屏幕自动适配缩放) 效果: 下面就看下代码实现的过程: 1.在代理中实现的代码: AppDelegate.h // 登陆界面设计 #import <UIKit/UIKit.h> #define ScreenHeight [[UIScreen mainScreen]bounds].size.height//屏幕高度 #define Scr

屏幕适配Autoresizing / Autolayout / Mansory / 自定义Frame实现

1. 什么是适配: 适应.兼容不同版本不同尺寸的移动智能设备 iPhone尺寸:3.5.4.0.4.7.5.5inch iPad尺寸:7.9.9.7inch,横竖屏适配 2. 点与像素 非retaina屏:1个点 = 1个像素 retain屏:1个点 = 4个像素 3. 什么是Autolayout 1>  是一种“自动布局”技术,专门用来布局UI界面的 2> 自iOS 6开始引入,由于Xcode 4的不给力,当时并没有得到很大推广 3> 自iOS 7(Xcode 5)开始,Autolay

iOS布局和屏幕适配的一点总结

曾经,iOS开发是不需要考虑屏幕适配问题的,因为只有一种屏幕尺寸.而现在已经有了4种屏幕,4,5,6,6P,因此屏幕适配也成了iOS开发中必须考虑的问题.并且,这4种屏幕的宽高比全部都不一样,所以简单的按比例缩放并不能解决问题.我们最近做的一个APP也处理了屏幕适配,本文简单总结一下 根据屏幕类型判断 我不知道有没有更好的办法,我们的做法是根据设备类型,写一些if...else,或者switch语句 判断机型可以使用screen的height(不能使用width,因为4和5的width是一样的,

ios之开发屏幕适配和系统版本适配

ios软件开发过程中很重要的一点是对系统和屏幕进行适配对系统的适配主要是IOS7以后和之前以及IOS8新增特性,屏幕适配主要是对不同设备采用不同的布局以最佳展示效果展现给用户. 针对系统的适配: IOS7以后和之前 <span style="font-size:18px;background-color: rgb(255, 255, 255);">#define IOSVersion [[[UIDevice currentDevice] systemVersion] flo

iOS里面的屏幕适配(两种方法)

第一种方法:进行等比缩放 适用于只有单个或者很少的页面需要适配的时候 第二种方法:用别人已经封装的类,进行屏幕的适配 适用于多个页面都需要进行屏幕适配 这是在ViewController.m里面的代码

iOS开发- 游戏屏幕适配(SpriteKit)

我们开发一个App的时候, 通常希望它在 iPhone, iPad, Mac上同时能运行, 尤其是游戏. 这样就需要我们考虑不同设备不同的分辨率,处理起来比较麻烦. 比如说,按照官方的做法,我们需要提供诸如 xx.png, [email protected], [email protected], xx~iPad.png, and [email protected] 这样不同的图片, 另外还有在程序中写大量 if (...){...} else if {...}这样的代码来区分不同的设备, 想想