一、概述
使用autolayout有一段时间了,Objective-C和swift下、iOS7和iOS8下都在用,
一路遇到了不少的坑,随遇随填,到今天也算是积累了不少经验了,这里总结一下,
通过自己新建的一个Doubi Demo来分享给大家。Doubi Demo我已上传到github上
去了(地址是:https://github.com/lihux/iLihuxAutoLayout),以后每篇文章的demo都
将放在github上,供大家参考。源码的workspace中有两个工程,分别使用OC和swift
实现一个相同的功能,大家在学习autolayout的同时也能够通过两种语言的对比来学习
、体会OC和swift编程的差异,以后的Demo也尽量同时用两种语言实现。
在学习英语的时候,老师会告诉我们,真正能够熟练应用英语的标志是You
naturally not only speak in English but think in English,即要学会用英语去思考,而
不仅仅是会将母语思考后的句子在大脑里翻译之后用英语说出来,能够真正做到这一
点,才算真正的掌握了英语。同样的道理,要真正掌握autolayout,就必须忘掉曾经
的frame,学会用autolayout的语言来思考和实践。具体一点儿来说,在创建UI的时候,
在storyboard或者代码中使用autolayout来构建UI而不是直接修改frame;在实现动画
的时候,也同样的通过修改autolayout来实现动画效果。
一般而言,自动布局(autolayout)的使用分为两个步骤:首先是创建autolayout,
这一步,主要是通过代码和storyboard相结合的方式,通过对UI空间(UIView、
UIbutton)等添加约束(constraint),让UI满足我们的产品的静态设计需求;其次
就是根据用户交互来修改或者增删已有UI上的约束,以产生相应的动画效果。
约束的增删改可以通过storyboard添加和代码添加两种方式,前者的优势就是
能够很直观的迅速添加约束,80%-90%的约束都能够通过这种方式迅捷的完成,实
践证明这种方法效率并不比以前的frame+autoresizingmask的方式低;后者的优点
则是动态、灵活,可以在运行时根据需要新建约束,满足特定环境下的需求,而修
改、删除已有约束,通常也只能通过代码来实现。总体而言,会有10%~20%的场景
会用到代码添加约束。这两种方式是互补的,要想游刃有余的使用自动布局为自己
工作,就必须同时掌握这两种方法。
二.详解
下面通过一个实际的Doubi Demo来展示一个自动布局的一般过程,该场景包括:
1)在storyboard中创建约束;
2)通过修改约束来实现简单的动画;
3)特定的场景必须要通过手动代码添加约束;
Demo分为两个场景,场景一如下图所示:
场景1:主要展示storyboard中添加约束以及通过约束实现动画效果<