刷微博看到nixzhu的AutoLayout Tips,Tip 1
是基于纯代码实现,由于本人比较懒,使用AutoLayout
除非万不得已,否则是不会动代码,这里使用可视化的方式来演示,只是觉得可能更便于理解!
那么开始,新建工程就不用多说了,或者懒癌患者下载原作者工程
(还是都下载吧,方便看效果)。
打开工程跑一盘,看下效果:
接下来我们开始纯可视化操作(PS:这里先不解释,直接跟着操作即可):
首先打开原作者工程
里的Main.storyboard
,拖一个UIView
到ViewController
里,这里为了方便观察理解,我把图片背景色改了下。
接着拖一个UIImageView
和UILabel
到灰色的UIView
里。
我们看到此时并无任何约束的警告,那好,现在开始添加约束。
这里先给UIImageView
添加上下左右的约束,constant
值随意。
添加完成之后开始报警告,先忽略,继续拉约束。
因为已经给UIImageView
和UILabel
添加了间隙约束,所以只用继续给UILabel
添加上
,右
,左
的约束即可。
其实这里给UILabel
添加约束还有一种做法就是添加右
边约束和Y
轴上的约束即可。
这里我选择第二种,同样的效果,约束能少则少,或者按照实际需求来就好。
约束已经添加完整,SDK
还是在报警告。
这里SDK
提示我们view
上需要X
和Y
轴上需要约束来确定控件位置。这里也是两个不等宽的 View,彼此相邻,并“共同”居中于 Superview
最后的步骤。我们把view
居中,然后在给一个X
轴上的约束即可,所以随便搞一下,添加一个竖向居中(也就是Y轴居中)
即可。到此我们全部约束添加完毕。
PS:这里为了更好区分,我给容器视图整了个备注叫Container View
。
即便是添加完了约束,SDK
还是提示不能确认位置。
大家不要慌,这里其实Container View
不能确定位置原因在于UIImageView
大小没确定,我们只需要把UIImageView
设置一个占位
或者给个图片
即可。
或者
这里以添加图片为准,就此所有约束错误都以解决,只剩下frame
的Waring
。自行修复一下即可(All Views Update Frames
)。
最后我们来看看完成的效果。
总体效果出来了,间距自行调整。手把手教程到此结束。
好了,po了一堆图之后我们再来简单说说核心思想:其实就是利用Storyboard里控件的Intrinsic Size
特性,利用其手动占位
或者系统自动
帮忙占位的原理就可确认其width
和height
,然后在让其四边顶住Container View
四边,Container View
的width
和height
也就确认了,剩下的就是确认Container View
的X
轴和Y
轴上的位置,三个控件的约束确定完成,Frame
也就确认好了,也就达到了两个不等宽的 View,彼此相邻,并“共同”居中于 Superview
的目的。
以此类推,利用两个或者多个控件占位居中。
其实Tip 2 - 让 AutoLayout 与 UIScrollView 合作无间
也是类似原理,�确认好UIScrollView
的ContentSize
即可,其实还有更多的玩法,如需要手把手教程,留言呼唤。
最后再给懒癌患者配张动态图:
我的界面开发原则,能不写代码就不写代码,让我们的ViewController
更瘦,逻辑更清晰更简洁。
欢迎吐槽和共同探讨无代码界面开发。