#pragma mark-- 屏幕适配/autoLayout autoresizingMask

1> 发展历程
代码计算frame -> autoreszing(父控件和子控件的关系) -> autolayout(任何控件都可以产生关系) -> sizeclass

2> sizeclass
* 仅仅是对屏幕进行了分类, 真正排布UI元素还得使用autolayout
* 不再有横竖屏的概念, 只有屏幕尺寸的概念
* 不再有具体尺寸的概念, 只有抽象尺寸的概念
* 把宽度和高度各分为3种情况
1) Compact : 紧凑(小)
2) Any : 任意
3) Regular : 宽松(大)
4) 符号代表
- : Compact
* : Any
+ : Regular
5) 继承性
* * : 其它8种情况都会继承
* - : 会被- - \ + -继承
+ * : 会被+ - \ + +继承
6) sizeclass和autolayout的作用
sizeclass:仅仅是对屏幕进行了分类
autolayout:对屏幕中各种元素进行约束(位置\尺寸)


方法一:
// self.aView 的上面(X) = self.view 的上面 (X) * 1 + 20
NSLayoutConstraint * aViewTop = [NSLayoutConstraint constraintWithItem:self.aView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:20];

//优先级 默认为1000 最大为1000
imageViewWidth.priority = 1000;

//压缩扩张的优先级默认为750 0 :水平方向 1:竖直方向
[imageV setContentCompressionResistancePriority:1000 forAxis:0];

//拥抱的优先级默认为250 0 :水平方向 1:竖直方向
[imageViewWidth setContentHuggingPriority:800 forAxis:0];

方法二:字符串(需要拼写正确)
NSString * str_H = @"H:|-x-[aView(200)]-20-[bView(==aView)]";

//H:水平方向 V:竖直方向
// | 表示边界
// - 表示距离某个边界或者组件。x 表示距边界的距离,如果组件和组件,组件和边界之间没有 - ,则表示两者之间的距离是0.
// []表示的是组件 ,()里的数值表示某个方向上的宽度

NSString * str_V1 = @"V:|-50-[aView(y)]";
NSString * str_V2 = @"V:|-50-[bView(200)]";

NSDictionary * dic = NSDictionaryOfVariableBindings(aView,bView);

//metrics里面的字典是除了view之外的参数的数值(如果有的话)
NSArray * c_H = [NSLayoutConstraint constraintsWithVisualFormat:str_H options:0 metrics:@{@"x":@10} views:dic];
[self.view addConstraints:c_H];

NSArray * c_V1 = [NSLayoutConstraint constraintsWithVisualFormat:str_V1 options:0 metrics:@{@"y":@100} views:dic];
[self.view addConstraints:c_V1];

单行的label布局 x:左 y:上 height width距离右边界 大于等于
多行label布局 下面的组件不固定的时候 x:左 y:上
height优先级降低750
竖直方向的正压力优先级增大(当label的字数增加时高度增加)
竖直方向的负压力的优先级增大(当label的字体比较小时会减小到比height还小)
width距离右边界 大于等于

九张图片的布局
1:x y
1/2/3 top 等高等宽 宽高比1:1
2:x
3:x 右边界
1/4/7 leading 等宽等高
4:y
7:y 下边界
4:高度 小于等于 (高度优先级200)
7:高度 小于等于 (高度优先级200)
5:x y
6:x y (右边界)
4/5/6:等宽登高
8:x y (下)
9:x y (右边界)(下)
7/8/9:等宽登高
有一个距离下的就可以把cell撑起来 (右边界)


使用第三方布局Masonry
// 蓝色控件
UIView *blueView = [[UIView alloc] init];
blueView.backgroundColor = [UIColor blueColor];
[self.view addSubview:blueView];

// 红色控件
UIView *redView = [[UIView alloc] init];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView]; //一定要先添加到视图上再添加约束否则会崩溃

// 添加约束 
CGFloat margin = 20;
CGFloat height = 50;
[blueView makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view).offset(margin);
//equalTo可以设置偏移量make.width.mas_equalTo(60);直接设置大小
make.right.equalTo(redView.left).offset(-margin);
make.bottom.equalTo(self.view.bottom).offset(-margin);
make.height.equalTo(height);
make.top.equalTo(redView.top);
make.bottom.equalTo(redView.bottom);
make.width.equalTo(redView.width);
}];

[redView makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.view.right).offset(-margin);
}];

更多内容--> 博客导航 每周一篇哟!!!

有任何关于iOS开发的问题!欢迎下方留言!!!或者邮件lieryangios@126.com 虽然我不一定能够解答出来,但是我会请教iOS开发高手!!!解答您的问题!!!

屏幕适配/autoLayout autoresizingMask的更多相关文章

  1. autoLayout+sizeClass屏幕适配

    一.屏幕适配(autoLayout+sizeClass) 1.目前市面上的主流布局形式: a. frame 布局,通过代码计算(老程序员习惯使用) b. autoLayout(新的出现)与sizeCl ...

  2. 屏幕适配-使用autoLayout

    当遇见xib中无法删除的控件时. 将这个错误的控件拖离本xib(第一个元素.xib文件是有许多元素组成的集合),确保这个xib是正确的.重新创建一个xib文件,将这个正确的xib元素整个复制过去. 在 ...

  3. iOS屏幕适配

    ## iOS屏幕适配 ### iOS屏幕适配发展史 1> iPhone4以前(没有iPad) * 不需要屏幕适配 2> iPad.iPhone5等设备出现 * 需要做横竖屏适配 * aut ...

  4. iOS开发——UI基础-屏幕适配

    一.适配 1.什么是适配?适应.兼容各种不同的情况 2.移动开发中,适配的常见种类 2.1系统适配 针对不同版本的操作系统进行适配 2.2屏幕适配 针对不同大小的屏幕尺寸进行适配 二.点和像素 1.在 ...

  5. iOS开发——屏幕适配篇&Masonry详解

    Masonry详解 前言 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-ip ...

  6. iOS屏幕适配-iOS笔记

    学习目标 1.[了解]屏幕适配的发展史 2.[了解]autoResizing基本用法 3.[掌握]autoLayout 的基本用法 4.[掌握]autoLayout代码实现 5.[理解]sizeCla ...

  7. iOS 适配/ autoLayout基本知识

    历史 iPhone3GS.iPhone4\4s:没有屏幕适配最早开发里面的程序全部都是写死的 iPad 旋转出来之后 Autoresizing问世iPhone5\5c\5s兼容各种不同的情况 系统适配 ...

  8. iOS开发点滴:iPhone屏幕适配

    最近开始做iOS开发,遇到一些小问题和解决方法,记录下.   今天是iPhone屏幕适配 iPhone5出来之后屏幕就有iPhone就有了2种尺寸:3.5寸和4寸,xcode 5 的IB设计器里面界面 ...

  9. 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)

    来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...

随机推荐

  1. 调用Live555接收RTSP直播流,转换为Http Live Streaming(iOS直播)协议

    Live555接收RTSP直播流,转换Http Live Streaming(iOS直播)协议 RTSP协议也是广泛使用的直播/点播流媒体协议,之前实现过一个通过live555接收RTSP协议,然后转 ...

  2. IE haslayout

    我们都知道浏览器有bug,而IE的bug似乎比大多数浏览器都多.IE的表现与其他浏览器不同的原因之一就是,显示引擎使用一个称为布局(layout)的内部概念.   因为布局是专门针对显示引擎内部工作方 ...

  3. 如何在.Net中使用MongoDB

    最近在研究mongodb,针对.net 中使用mongodb的文章要么是早期的驱动版本,要么资料很少,所以写个随笔记录一下 本文主要记录 1.什么是MongoDB 2.MongoDB windows ...

  4. XSS研究2-来自内部的XSS攻击的防范

    引入: 前面我们分2篇文章分别探讨了来自外部的XSS攻击和来自内部的XSS攻击,现在我们来专门探讨如何防范来自内部的XSS攻击.   实践:  http://www.cnblogs.com/crazy ...

  5. 在wamp下使用netbeans开启Xdbug

    1.到http://www.xdebug.org 下载与PHP对应的xdebug版本,也可以把phpinfo源码粘贴到http://www.xdebug.org/find-binary.php,提交后 ...

  6. redis3.2.6 集群安装

    下载   [root@localhost ~]# cd /usr/local/src/ [root@localhost src]# wget http://download.redis.io/rele ...

  7. web工作过程

    了解浏览器与服务器进行通信和访问的过程 打开浏览器-输入URL地址 当我们访问一个网页时,如http://www.baidu.com,这个网址包含四个部分的内容: 1.第一部分:协议类型:这里是htt ...

  8. characterEncodingFilter作用

    package com.demo.test; import java.io.IOException; import javax.servlet.Filter; import javax.servlet ...

  9. python 创建mysql数据库

    昨天用shell脚本创建数据库,涉及java调用,比较折腾,改用python直接创建数据库,比较方便,好了,直接上代码,相关注释也添加了 # _*_encoding:UTF-8_*_import My ...

  10. Java经典编程题50道之四十一

    海滩上有若干个一堆桃子,五只猴子来分.第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份. 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中, ...