#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. 如何自学成为一个WEB前端

    WEB前端是做什么的? 那些什么高大上的介绍作者就略过了,简单来说就是做网页的,我们上网浏览的网站界面就是WEB前端工程师做的. 在互联网迅速发展的近几年,你上网冲浪的时候是不是感觉WEB网站越来越漂 ...

  2. SpringMVC 3.2集成Spring Security 3.2集成mybaties

    目录结构如下

  3. JavaScript基础(.....持续待更)

    javascript热身 一.你知道,为什么JavaScript非常值得我们学习吗? 1. 所有主流浏览器都支持JavaScript. 2. 目前,全世界大部分网页都使用JavaScript. 3. ...

  4. 放弃FreeMark?

    JAVA项目FreeMark 生产静态页面   a)    弊端                 i.          依赖后台工程师拼装页面,不利于前端.后台工作完全解耦. ii.         ...

  5. characterEncodingFilter作用

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

  6. oracle查询第一篇

    第一个小知识点: clear 在oracle中也可以用以清除屏幕上的内容 第二个小知识点: 在一个表中插入自身的查询结果 insert into my_table (id,name,age) sele ...

  7. badboy录制兼容性有趣测试

    badboy录制默认是启动IE浏览器,使用badboy录制脚本时,遇到测试系统对IE浏览器不兼容时,就需要考虑换浏览器,修改为其他浏览器(如firefox.chrome)录制,只需要设置该浏览器为默认 ...

  8. js获取页面宽高

    网页可见区域宽:document.body.clientWidth网页可见区域高:document.body.clientHeight网页可见区域宽:document.body.offsetWidth ...

  9. tr的用法

    一.tr的基本功能 功能:转换.挤压或删除字符串,从标准输入接收输入,输出到标准输出基本用法:tr [options] string1 [string2] 二.例子 1.转换 $ echo " ...

  10. SQL Server各个版本的区别

    SQLEXPR_x64_CHS.exe,标准SQL Server Express edition,只有数据库引擎,甚至连图形管理界面都没有.SQLEXPRWT_x64_CHS.exe,多了一个图形管理 ...