http://www.jianshu.com/p/767f72b7d754

这篇文章紧跟上边autolayout的一些小技巧,如果你没有看过,不防先看下《你真的会用autolayout吗?》这篇文章。上篇讲到autolayout的一些小技巧,但是还是免不了要加那些烦人的约束,自己去计算约束。而且autolayout出来这么久了,依然有好多应用在用手动布局。当然不是说手动布局有什么不好,有些特别复杂的界面还是要用手动布局的。主要是现在的autolayout对稍微复杂一些的界面加约束是特别头疼的一件事情,约束太多了,而且好多是重复繁杂的。iOS9新特性StackView,让适配变得非常简单,你甚至不用加约束。只需要简单设置几个属性。不多说,还是老规矩先上图。

StackView

可以看到,我这里除了最外面的垂直StackView加了上下左右四个约束,其余的没有加一个约束,就适配了。

由于这里步骤较多,分开讲解一下

Vertical Stack View

首先添加一个纵向的StackView。这里不多解释。

属性

这里解释一下这几个属性的含义:

Axis:StackView的布局属性(水平和垂直两个方向)

Alignment:设置子视图的对其方式(水平和垂直有所差别)

1)Fill:子视图填充StackView。

2)Leading:靠左对齐。

3)Trailing:靠右对齐。

4)Center:子视图以中线为基准对齐。

5)Top:靠顶部对齐。

6)Bottom:靠底部对齐。

7)First Baseline:按照第一个子视图中文字的第一行对齐。

8)Last Baseline:按照最后一个子视图中文字的最后一行对齐。

Distribution:设置子视图的分布比例

1)Fill:默认分布方式。

2)Fill Equally:子视图的高度或宽度保持一致。

3)Fill:Proportionally:StackView自己计算出它认为合适的分布方式。

4)Equal Spacing:子视图保持同等间隔的分布方式。

5)Equal Centering:每个子视图中心线之间保持一致的分布方式。

Spacing:设置子视图之间的间距

Horizontal Stack View

然后向垂直StackView中放三个水平StackView,可以看出StackView是可以嵌套的,三个水平StackView按照之前设置好的属性,等宽登高,间距为10排列。我这里设置三个水平StackView的属性是全选统一设置的。

扔子视图

这步没什么要解释的,扔子视图就行了,不用加一个约束。

下面再试下在iPhone5上效果

适配

StackView只在iOS8和iOS9上能用,iOS7不支持,所以这半年用到的应该不会太多,根据以往惯例,明年估计将有很多应用不再对iOS7适配,StackView让适配变得非常简单。这里仅以9宫格为例,当然StackView还有很多强大之处。尤其是对于动态单元格的布局,更加有利。我这里就不再过多介绍,后面有可能我会把,我项目里面有动态单元格的用StackView单独做一个出来。

收工,感谢支持!

iOS9自动布局神器StackView的更多相关文章

  1. iOS9新特性——堆叠视图UIStackView

    一.引言 随着autolayout的推广开来,更多的app开始使用自动布局的方式来构建自己的UI系统,autolayout配合storyBoard和一些第三方的框架,对于创建约束来说,已经十分方便,但 ...

  2. iOS9新特性-UIStackView

    1. UIStackView相关属性理解 UIStackView是iOS9之后推出的,我也是第一次接触,在学习的过程中对于其中的相关属性,尤其是对其中的distribution几个属性值,一知半解的, ...

  3. iOS9 适配

    iOS适配的相关内容的整理 之前iOS开发者一直很庆幸自己不用像安卓开发者那样适配各种不同类型的机型,但如今随着iPhone各种机型的改变,适配也成了我们开发中必须会的内容了.首先我们来了解一下对于不 ...

  4. 简便的自动布局,对UIStackView的个人理解!

    序言: 更新了很久的Linux,我怕朋友们都视觉疲劳了,今天就更新在学ios开发时候,对一些知识点的理解.希望各位会喜欢! 正文: UIStackView 类提供了一个高效的接口用于平铺一行或一列的视 ...

  5. IOS9适配 MARK

    最近做了iOS 9的适配,程序出现大量警告也做了些处理,写出来分先给大家. 一.iOS 9适配 问题一: <Error>: CGContextSaveGState: invalid con ...

  6. ios9中 UIStackView的使用

    ios9中 UIStackView的使用 by 伍雪颖 UIStackView能够垂直或水平排布多个subview, 自己主动为每一个subview创建和加入Auto Layout constrain ...

  7. iOS9适配+warning消除

    最近做了iOS 9的适配,程序出现大量警告也做了些处理,写出来分先给大家. 一.iOS 9适配 问题一: <Error>: CGContextSaveGState: invalid con ...

  8. 如何利用Reveal神器查看各大APP UI搭建层级

    作者 乔同X2016.08.22 19:45 写了3195字,被42人关注,获得了73个喜欢 如何利用Reveal神器查看各大APP UI搭建层级 字数413 阅读110 评论0 喜欢5 title: ...

  9. iOS12、iOS11、iOS10、iOS9常见适配

    作者:花丶满楼 链接:https://juejin.im/post/5c49a7d0518825254e4d46fc 一.iOS12(Xcode10) 1.1.升级Xcode10后项目报错 不允许多个 ...

随机推荐

  1. Android初级教程理论知识(第六章广播接受者)

    总体概述: 广播接收者 现实中:电台要发布消息,通过广播把消息广播出去,使用收音机,就可以收听广播,得知这条消息 Android中:系统在运行过程中,会产生很多事件,那么某些事件产生时,比如:电量改变 ...

  2. SimpleDateFormat用法大全及易错分析

    SimpleDateFormat 使用java语言处理日期相关操作,就不可避免的会使用到SimpleDateFormat.当然了,目前我们采用较多的是Calendar类,通过对之求相关的属性值即可得到 ...

  3. 【翻译】Sencha Cmd中脚本压缩方法之比较

    概述 为什么要修改默认设置 YUI压缩 Google Closure编译器 UglifyJS 案例研究Ext JS 6示例应用程序 注意事项 自定义JS压缩 小结 概述 这么多年来,Web开发人员都被 ...

  4. java组播MulticastSocket

    在单播模式中有服务器端和客户端之分,而组播模式与单播模式不同,每个端都是以路由器或交换机做为中转广播站,任意一端向路由器或交换机发送消息,路由或交换机负责发送其他节点,每个节点都是同等的.所以在编程模 ...

  5. 分布式进阶(十三)Docker Container间实现数据共享

    sudo docker run -it -v /usr/lib:/usr/lib/dbdata --name dbcontainer-192.168.1.184 ubuntu:14.04 sudo d ...

  6. Eclipse/Myeclipse生成serialVersionUID方法

    serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性. 如果你修改代码重新部署后出现序列化错误,可以考虑给相应的类增加serialVersio ...

  7. Leetcode_107_Binary Tree Level Order Traversal II

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41964067 Given a binary tree, r ...

  8. 解决Plugin is too old,please update to a more recent version,or set ANDROID_DAILY_OVERRIDE..

    今天遇到了很诡异的事情. 昨天晚上还好好的工程今天就挂了,提示如下错误: Plugin is too old,please update to a more recent version,or set ...

  9. Android群英传笔记——第九章:Android系统信息和安全机制

    Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个 ...

  10. 【65】Mybatis详解

    Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果.MyBatis能够 ...