转载

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

刷微博看到 nixzhu 的 AutoLayout Tips , Tip 1 是基于纯代码实现,由于本人比较懒,使用 AutoLayout 除非万不得已,否则是不会动代码,这里使用可视化的方式来演示,只是觉得可能更便于理解!

那么开始,新建工程就不用多说了,或者懒癌患者下载原作者 工程 (还是都下载吧,方便看效果)。

打开工程跑一盘,看下效果:

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

接下来我们开始纯可视化操作(PS:这里先不解释,直接跟着操作即可):

首先打开原作者 工程 里的 Main.storyboard ,拖一个 UIViewViewController 里,这里为了方便观察理解,我把图片背景色改了下。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

接着拖一个 UIImageViewUILabel灰色的UIView 里。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

我们看到此时并无任何约束的警告,那好,现在开始添加约束。

这里先给 UIImageView 添加上下左右的约束, constant 值随意。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

添加完成之后开始报警告,先忽略,继续拉约束。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

因为已经给 UIImageViewUILabel 添加了间隙约束,所以只用继续给 UILabel 添加 的约束即可。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

其实这里给 UILabel 添加约束还有一种做法就是添加 边约束和 Y 轴上的约束即可。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview 手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

这里我选择第二种,同样的效果,约束能少则少,或者按照实际需求来就好。

约束已经添加完整, SDK 还是在报警告。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

这里 SDK 提示我们 view 上需要 XY 轴上需要约束来确定控件位置。这里也是 两个不等宽的 View,彼此相邻,并“共同”居中于 Superview 最后的步骤。我们把 view 居中,然后在给一个 X 轴上的约束即可,所以随便搞一下,添加一个 竖向居中(也就是Y轴居中) 即可。到此我们全部约束添加完毕。

PS:这里为了更好区分,我给容器视图整了个备注叫 Container View

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

即便是添加完了约束, SDK 还是提示不能确认位置。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

大家不要慌,这里其实 Container View 不能确定位置原因在于 UIImageView 大小没确定,我们只需要把 UIImageView 设置一个 占位 或者给个 图片 即可。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

或者

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

这里以添加图片为准,就此所有约束错误都以解决,只剩下 frameWaring 。自行修复一下即可( All Views Update Frames )。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview 手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

最后我们来看看完成的效果。

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview 手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

总体效果出来了,间距自行调整。手把手教程到此结束。

好了,po了一堆图之后我们再来简单说说核心思想:其实就是利用Storyboard里控件的 Intrinsic Size 特性,利用其 手动占位 或者 系统自动 帮忙占位的原理就可确认其 widthheight ,然后在让其四边顶住 Container View 四边, Container Viewwidthheight 也就确认了,剩下的就是确认 Container ViewX 轴和 Y 轴上的位置,三个控件的约束确定完成, Frame 也就确认好了,也就达到了 两个不等宽的 View,彼此相邻,并“共同”居中于 Superview 的目的。

以此类推,利用两个或者多个控件占位居中。

其实 Tip 2 - 让 AutoLayout 与 UIScrollView 合作无间 也是类似原理,确认好 UIScrollViewContentSize 即可,其实还有更多的玩法,如需要手把手教程,留言呼唤。

最后再给懒癌患者配张动态图:

手把手AutoLayout - 两个不等宽View,“共同”居中于Superview

我的界面开发原则,能不写代码就不写代码,让我们的 ViewController 更瘦,逻辑更清晰更简洁。

欢迎吐槽和共同探讨无代码界面开发。

原文  http://www.rockerhx.com/2015/11/07/2015-11-07-Two-Views-Center-Superview/
正文到此结束
Loading...