AutoLayout(自动布局)
1. iOS两种自适应布局方式:(修正说明:)
-AutoLayout(自动布局) + SizeClasses(尺寸类别)
-Autoresizing (自动调整尺寸/弹簧式调整尺寸)
前者 AutoLayout 是从iOS6出现,通过创建视图约束实现自适应,SizeClasses是iOS8 开始出现,用于配合AutoLayout使用,为解决所有(包括iPhone,iPad)iOS设备屏幕尺寸和屏幕旋转时UI的适配。
后者是早期开发使用的适配界面的方式,现在仍然保留。通过弹簧式调整控件尺寸,使其适应屏幕的尺寸变化。
苹果官方建议使用AutoLayout。
Autoresizing 缺点:
> 其描述界面变化规则不够灵活,很多变化规则根本无法精确描述。autoresizingMask缩放比例是UIKit内部计算的,开发者无法指定缩放比例的精确值。
- > 变化规则只能基于父视图与子视图之间,无法建立同级视图或者跨级视图之间的关系。
AutoLayout 的核心原理:
> view具有自我计算尺寸,布局的能力。通过它自身的内容,能够得到尺寸。
> view的布局位置,确定于它与superview及其他view的关系。
> 与传统的autoresizingmask自适应相比,AutoLayout更精确,能绝对的确定view的布局。
> view不一定需要一个初始的rect。AutoLayout中,view如果有足够的constraint,便可以确定自己的尺寸和位置,并且知道自己和其他view的关系。即,想确定view的布局,就给它(们)添加constraint。
2. AutoLayout 自动布局 有三种方式:
> 在Xcode 可视化界面 Interface Builder 中右下角添加并设置约束
> 纯代码添加约束
> 纯代码通过可视化格式语言VFL(Visual Format Language) 添加约束
2.1 可视化设置约束
Interface Builder中,右下角
,依次是Alignment(布局),Pin(固定),Resolve(解决约束错误)
以下列出三项中常用的项
Alignment: Horizontally in Container 在容器中水平中心,值为0,设置其他值时,表示水平方向偏移中心位置量
Vertially in Container 在容器中竖直中心,值为0,设置其他值时,表示水平方向偏移中心位置量
Pin: 
上方四个值,从左侧顺时针依次是:
Leading Space to Superview // 相对于父视图的左间距 leading:首部
Top Space to Superview // 相对于父视图的上间距
Trailing Space to Superview // 相对于父视图的右间距 trailing:尾部
Bottom Space to Superview // 相对于父视图的底间距
Width : 固定自身宽度
Height : 固定自身高度
若要使多个视图相同的宽度,高度,则先同时选中多个视图,然后在Pin中选择:
EqualWidths: 多个视图相同宽度;EqualHeights: 多个视图相同高度
若要使两个视图水平方向或垂直方向上相互之间的距离固定,先选中其中一个视图,同时按住键盘上control键,拉线到另一个视图,在弹出框中:
选中 Horizontal Spacing (水平方向间距) 或 Vertical Spacing(竖直方向间距),然后在被选中视图的Size Inspector(右侧倒数第二个选项卡) 中Constraints 栏目下,如图所示:
点击“Edit”,
弹出
在 constant中输入固定间距值
Resolve: 主要使用到 Clear Constraints 清除视图的约束
2.2 纯代码设置约束
NSLayoutConstraint 布局约束类
> 纯代码方式添加视图,不指定frame(若可视化下添加其位置,大小对约束有影响,会产生冲突)
> 设置禁止自动尺寸转换成约束,否则会产生约束冲突
被约束的视图.translatesAutoresizingMaskIntoConstraints = NO
在可视化下Interface Builder 上默认设置就是关闭的
> 创建约束
[NSLayoutConstraint constraintWithItem:lb attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:100]
// 参数一:被约束的视图:view1
// 参数二:指定在被约束的视图哪个属性上约束,位置或大小
// 参数三:被约束的视图与参照视图指定属性之间的关系
// 参数四:参照视图:view2
// 参数五:参照视图的属性
// 参数六: multiplier:被约束视图指定属性是参照视图指定属性的多少倍
// 参数七:被约束视图的指定属性需要加的浮点数 value
计算公式:view1.attr [=,>=,<=] view2.attr * multiplier + value;
> 添加约束
注意:约束是添加到参照视图上。
[view2 addConstraint: ]
[扩展] 第三方库实现约束 Masonry
官网: https://github.com/SnapKit/Masonry
2.3 VFL设置约束
通过 NSLayoutConstraint 类方法:
+ (NSArray<__kindof NSLayoutConstraint *> *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(nullable NSDictionary<NSString *,id> *)metrics views:(NSDictionary<NSString *, id> *)views;
示例:
NSArray *constraints=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[button]-[button1(==height)]"
options:0
metrics:@{@"height":@30}
views:NSDictionaryOfVariableBindings(button1,button2)];
AutoLayout(自动布局)的更多相关文章
- iOS AutoLayout自动布局&Masonry介绍与使用实践
Masonry介绍与使用实践:快速上手Autolayout http://www.cnblogs.com/xiaofeixiang/p/5127825.html http://www.cocoachi ...
- iOS:Autolayout自动布局实例
Autolayout自动布局实例即可以用故事板布局,也可以用纯代码创建,各有各的优点:用故事板布局,比较方便,而且直观,可以很直白的看到视图布局后的变化:采用代码布局,虽然代码比较多,有些麻烦,但是可 ...
- AutoLayout自动布局
原文转自http://www.cnblogs.com/xjf125/p/4895978.html 目录: 一.什么是AutoLayout? 二.创建autoLayout的方法 三.VFL语言 ...
- 轻量级应用开发之(06)Autolayout自动布局1
一 什么是Autolayout Autolayout是一种“自动布局”技术,专门用来布局UI界面的. 自IOS7 (Xcode 5)开始,Autolayout的开发效率得到很大的提高. 苹果官方也推荐 ...
- AutoLayout自动布局之VFL语言代码实现(一个神奇的语言)
一.什么是VFL语言?为什么要VFL语言? VFL全称是Visual Format Language,翻译过来是“可视化格式语言” VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言 ...
- AutoLayout自动布局,NSLayoutConstraint 视图约束使用
一.方法 NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:<#(id)#> attribut ...
- 轻量级应用开发之(06)Autolayout自动布局2
一 Masonry 下载地址:https://github.com/SnapKit/Masonry
- 几种AutoLayout自动布局所经常使用的布局约束类型
width表示约束ui控件的固定宽度 height表示约束ui控件的固定高度 Leading Space to Superview 与父视图的左边界线保持固定距离 Trailing Space to ...
- [OC] autoLayout 博客文档
tip :记录几个博客文档 iOS 8 Auto Layout界面自动布局系列5-自身内容尺寸约束.修改约束.布局动画 iOS AutoLayout自动布局中级开发教程(5)-修改约束的值,延迟加载 ...
随机推荐
- VS2015安装EF Power Tools
前言 最近在研究EF觉得EF Power Tools比较强大,可以利用其特性来进行Code First模型验证等等,本以为在VS2015扩展和更新中能找到EF Power Tools,结果未找到,还得 ...
- 搭建GoldenGate的单向复制环境
配置环境: 建议在相同版本OGG(即Oracle GoldenGate)之间进行复制,我在这里之所以选择不同版本的OGG,便于后续的比较学习. 一.准备OGG的运行用户 在这里,我直接使用oracle ...
- Lua 学习笔记(十)数据结构
在Lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础.其他语言提供的数据结构,如数组.记录.线性表.队列.集合等,在Lua中都可以通过table来表示.而且使用Lua实现这些数据 ...
- npm上传自己的项目
npm安装就不介绍了,自行度娘.本文介绍npm上传 先初始化:npm init 根据提示填完系统介绍信息(package.json): 再登录npmjs: npm login 效果如图: 输入注册的用 ...
- android 通过访问 php 接受 or 传送数据
先说传送数据,可以在 利用 php 代替传送,直接把 访问的url加上 xxx.php?informatin=xxxxxx 就行了 接收的看代码吧,详细注释. 首先是 我自己定义的php 文件 < ...
- 优化JS加载时间过长的一种思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 去年公司在漳州的一个项目中,现场工程人员反映地图部分出图有点 ...
- 【PHP面向对象(OOP)编程入门教程】23.自动加载类 __autoload()函数
很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在 ...
- Java中的反射和注解
前言 在Java中,反射机制和注解机制一直是一个很重要的概念,那么他们其中的原理是怎么样呢,我们不仅仅需要会使用,更要知其然而之所以然. 目录 反射机制 反射如何使用 注解定义 注解机制原理 注解如何 ...
- 一步一步开发Game服务器(三)加载脚本和服务器热更新(二)完整版
上一篇文章我介绍了如果动态加载dll文件来更新程序 一步一步开发Game服务器(三)加载脚本和服务器热更新 可是在使用过程中,也许有很多会发现,动态加载dll其实不方便,应为需要预先编译代码为dll文 ...
- N[开源].NET CORE与MySql更配, MySqlSugar ORM框架 3.x
MySqlSugar 3.X API 作为支持.NET CORE 为数不多的ORM之一,除了具有优越的性能外,还拥有强大的功能,不只是满足你的增,删,查和改.实质上拥有更多你想像不到的功能,当你需要实 ...