iOS开发-Autolayout小结
昨天重点学习了下Autolayout,把以前没有吃透的概念重新理解了下,现在感觉整个人都是棒棒哒。
上一个项目是使用计算坐标代码的方式来布局UI界面,这种方式的缺点在于当苹果发布新尺寸设备时需要重写代码来适配。
Autolayout的思想和安卓的相对布局比较像,通过设置控件与其父控件、相邻控件之间的关系来确定其位置、大小。
即使苹果推出新尺寸设备,Autolayout也能适应新的屏幕,因为它所有的设置都是相对的。
- AutoResizing
在Autolayout之前,有AutoResizing可以作屏幕适配,但局限性比较大,有些任务无法完成(两等分屏幕)
- Autolayout
1. Autolayout的2个核心概念:参照和约束
- 参照:参照的对象
- 约束:对控件位置大小的约束
2. Autolayout的警告和错误
- 警告(黄色图标):控件的frame不匹配所添加的约束, 比如约束控件的宽度为100, 而控件现在的宽度是110
- 错误(红色图标):缺乏必要的约束,比如只约束了宽度和高度, 没有约束具体的位置;两个约束冲突, 比如1个约束控件的宽度为100, 1个约束控件的宽度为110
3.代码实现Autolayout
之前在学习使用Autolayout时都是在storyboard中拖拖拽拽,很多原理都没有理解,导致在页面布局时会有很多地方没有思路去实现。
拖拽的方式归根到底还是会转化成代码,通过代码实现Autolayout能知其所以然。
- 代码实现Autolayout的步骤
- 利用NSLayoutConstraint类创建具体的约束对象
- 添加约束对象到相应的view上
- (void)addConstraint:(NSLayoutConstraint *)constraint;
- (void)addConstraints:(NSArray *)constraints;
- 代码实现Autolayout的注意点
- 要先禁止autoresizing功能,设置view的下面属性为NO(view.translatesAutoresizingMaskIntoConstraints = NO)
- 添加约束之前,一定要保证相关控件都已经在各自的父控件上
- 不用再给view设置frame
- NSLayoutConstraint
一个NSLayoutConstraint对象就代表一个约束
创建约束对象的常用方法:
+(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;
view1 :要约束的控件
attr1 :约束的类型(做怎样的约束)
relation :与参照控件之间的关系
view2 :参照的控件
attr2 :约束的类型(做怎样的约束)
multiplier :乘数
c :常量
自动布局有个核心公式
obj1.property1 =(obj2.property2 * multiplier)+ constant value
- 添加约束的规则
在创建约束之后,需要将其添加到作用的view上
在添加时要注意目标view需要遵循以下规则:
1)对于两个同层级view之间的约束关系,添加到它们的父view上


通过代码方式来添加Autolayout会比较繁琐,每个约束都需要实例化一个NSLayoutConstraint对象,然后添加到对应的view上,一个简单的需求需要写很多代码才能实现,无论从生理上还是心理上都是拒绝的。
下面一篇博客 我将会对VFL(Visual Format Language)进行介绍,它是苹果为简化Autolayout的编码而推出的抽象语言
如果觉得写的好不错,打赏点买个饮料
网上写的比较好的关于Autolayout的帖子:
http://ued.ctrip.com/blog/?p=3736#
http://lvwenhan.com/ios/441.html
http://mathewsanders.com/designing-adaptive-layouts-for-iphone-6-plus/
iOS开发-Autolayout小结的更多相关文章
- AIR for IOS开发问题小结
昨天终于成功地向APP STORE提交了应用,个人感觉用AIR做IOS开发就是个坑啊.出了问题之后,问苹果的技术支持,人家说“对于非XCODE环境下开发及发布所造成的问题我们在资料库中无法找到相应的解 ...
- IOS开发GCD小结
0. Brief Introduction GCD,全称Grand Central Dispath,是苹果开发的一种支持并行操作的机制.它的主要部件是一个FIFO队列和一个线程池,前者用来添加任务,后 ...
- iOS开发——Autolayout下动态调整单元格高度
情景描述: 有时候我们希望更新某一个单元格的数据,通常的做法是使用reloadData方法更新整个单元格.但是对一些情况是不适用的或者说实现起来比较麻烦.比如说这种简单的"点开"一 ...
- iOS开发——NSString小结
1.创建常量字符串. NSString *astring = @"This is a String!"; 2.创建空字符串,给予赋值. NSString *astring = ...
- iOS开发UI篇—UITableview控件使用小结
iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...
- iOS开发网络篇—网络请求(HTTP协议)小结
iOS开发网络篇—网络请求(HTTP协议)小结 iOS开发网络篇—网络请求(HTTP协议)小结 1. 聊一下HTTP协议(协议的完整的通信过程) 2.通信过程 1> 请求 * 客户端 --> ...
- iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry)
iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry) 随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫 ...
- IOS开发,知识点小结,ios开发中经常使用的宏定义总结
IOS开发,从应用跳转到用浏览器打开网页: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http:// ...
- iOS开发之山寨版新浪微博小结
在之前的博客IOS开发之新浪围脖中获取微博的内容是使用我自己的access_token来请求的数据,那么如何让其他用户也能登陆并获取自己的微博内容呢?接下来就是OAuth和SSO出场的时候啦.OAut ...
随机推荐
- Java 应该被记住的8位大人物
这里列举了 8 个 Java 人物,他们创建了对 Java 社区贡献很大的框架.产品.工具和图书,也因此改变了 Java 的编码方法. 8. Tomcat 和 Ant 创办人 James Duncan ...
- Java线程与锁
概要:线程的实现方法. 线程调度.线程状态及转换.线程安全(5种分类.3种实现方法.锁优化技术) 进程是OS进行资源分配的基本单位,线程是CPU调度的基本单位. 1.线程的实现方法 可参阅 我是一个进 ...
- Sword libcurl使用
libcurl编译 >> ./configure --prefix=/opt/soft/curl --disable-ldap --disable-ldaps >> make ...
- HBase原理、设计与优化实践
转自:http://www.open-open.com/lib/view/open1449891885004.html 1.HBase 简介 HBase —— Hadoop Database的简称,G ...
- Build 2016上一些令人兴奋的东西
本来应该要更新Windows IOT开发入门的,但是由于Build 2016刚刚过去,不得不将一些令人兴奋的东西给大家进行分享. 首先对于错过这次直播的,可以在以下链接再次看到观看: https:// ...
- (笔记)Mysql实例:建库建表并插入数据1
drop database if exists school; // 如果存在school则删除create database school; // 建立库schooluse school; / ...
- Android Studio 出现 Build gradle project info
导入Android Studio,一直停留在Build gradle project info.主要是因为google被墙,下载gradle很慢,有时候设置下载不成功. 参考链接 http://blo ...
- 关于阅读JDK源码的准备
说明:本篇是给自己看的. 笑 最近突然有冲动 想研究下JDK的源码,搜索了一番,基本上推荐从集合开始,精华部分包括:集合.IO.多线程.网络编程. 虚拟机部分先放一放吧,感觉现在不适合我这种半路出家的 ...
- 【总结】牛客职播第九期:您的美团点评offer已送到门口,快来与我们一起影响世界!
一.介绍 美团点评2018校园春招流程介绍&面试答疑 讲师:燕鹏.Taylor 二.收获 面试时如果太紧张或者内向,容易吃亏,所以建议把面试当做展示自己的一次舞台. 遇见一道编程题目,如果无法 ...
- PHP + Smarty + html5 构建Wap应用
一 简介 Smarty是一个PHP编写的模板引擎(template engine),主要用于构建web应用程序的表示层.Smarty的主页是http://www.smarty.net/down ...