iOS 9 学习系列:UIStack View
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》
在 iOS9 中,Apple 引入了 UIStackView,他让你的应用可以通过简单的方式,纵向或横向的叠放你的 views。UIStackView 采用 auto layout 的方式来管理他的子视图的位置和尺寸。让你更简单的构建自适应的 UI。
如果在 iOS9 之前,你想要创建类似 UIStackView 为你提供的这种布局,你需要构建大量的 constraints。你需要编辑许多诸如边距、高度、x/y 轴的位置,还有它们的依赖关系等。
UIStackView 把这些全部帮你做了。甚至在你添加或者移除某些 view 时,还提供了平滑的动画。当 view 状态改变时,他会自动的改变 layout 的属性值。
使用 UIStackView
现在我们通过创建一个例子来说明怎么使用 UIStackView,最终的代码放在了 Github,你可以下载来研究.我们要创建一个简单的示范,演示 UIStackView 是怎么工作的?这个页面底部有2个segmented controls,用来控制 UIStackView 的对齐和分布的属性。
上面的图片就是我们要创建的示例。如你所见,我们显示了4个朋友的图片,还有2个 segmented controls 在下面。这些 UI 使用了auto layout 布局,可以适配多种尺寸。
一会儿的制作过程,会让你感到惊喜,我们仅仅手动的添加了4个 layout positioning constraints。所有在这个UIStackView中的view都由它自动控制位置。我们一共有4个 UIStackView, 只有***个我们需要设置一下他的 constraints。这是我们页面中 stackview 所在的位置。
当你从 Interface Builder 中拖拽了一个 vertical stack view 到页面上后,你可以打开它的 constraint 面板,像上图一样编辑它的属性。这会把这个主 stack view 放在页面的中央,正确的位置上。
从 Interface Builder 中拖拽3个 horizontal stack view 到刚才创建好的 UIStackView 中。在最上面的 stack view,包含四个 UIImageView ,每个 imageView 中展示一个我们的朋友的照片。你拖拽四个 UIImageView 到 stack view 中就可以了。每个图片的大小尺寸都是不一样的。为了避免变形,我们给 imageView 的 contentMode 设置为 Aspect Fit。这意味着,不去管图片的尺寸,图片总会以正确的比例展示在 imageView 中。
你可能注意到了,在最终的 demo 中,每个 imageView 之间有个间隔,这是因为设置了 stackView的 spacing 属性为5的原因。在 interface builder 的 attributes inspector 面板可以设置 spacing 的值,同时还可以设置 alignment 和 distribution 的属性。这里我们缺省的设置为 Fill。因为一会儿我们会通过选择 segment 来改变它的值。
另外两个 stackView,同样是 horizontal stack view。非常简单,每个 stack view 中包含一个 label 和一个 segmented control。设置 segmented control为下面的内容。
- Distribution
- Fill
- Fill Equally
- Fill Proportionally
- Equal Spacing
- Equal Centering
- Alignment
- Fill
- Top
- Center
- Bottom
我们一会儿就能看到,这些属性是如何影响布局的。很多时候,他们的排列方式依赖 contentSize的值。好在,我们这个例子非常简单,image 的大小就是照片的实际大小。
现在我们的 UI 都创建好了。我们需要给 segment 设置选中后的动作。首先把最上面的 stack view 拖拽 outlet 到 viewController 中,命名为 peopleStackView。然后分别拖拽一个 action 给segmented control。在 action 中对 peopleStackView 的 alignment 和 distribution 属性进行调节,对齐和排列方式由用户决定。
你可以看到,我给每个动作加了一个动画的效果,但这不是必须的。如果你移除动画效果,对齐和排列的方式依然会改变。好现在运行一下程序吧。
你可以看到视频中的结果,点击打开视频
尝试着使用不同的排列组合,看一下会是什么结果。它会让你知道UIStackView时多么强大,在不同尺寸的设备上开发用户界面有多方便。
为现有的view,添加UIStackView
如果你想为你现在已经做好的 view 添加 UIStackView,也很简单。先移除掉你的 view 上的constraint,然后选中他们,点击一下 interface builder 的底部右手边,***个按钮。(就是原来你给 view 添加 constraint 的那些按钮,左边多了一个)。这会立刻把你选中的view,全部放入一个 UIStackView 中。
这会把你原来的布局方式转为stack view的布局方式,由stack view来控制布局。
延伸阅读
想要了解更多关于Xcode7中 UIStackView的内容,推荐阅读 WWDC 2015 的 session 218 Mysteries of Auto Layout, Part 1.在视频前15分钟里,Jason Yao 介绍了 UIStackView,并且现场制作了一个Demo演示如何操作的。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
苹果副总裁也承认了iOS 9并不完美
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 本周XcodeGhost木马事件继续发酵,今天,苹果高级副总裁Philip Schiller在接受电话采访中表示:“苹果系统并非***,事实上没有系统是***的,而此次事件也促使我们提升和改进,重要的是我们能在这当中学到东西,并且之后加以改进。” 事实上这并不是苹果高管***次出面解释这种事情,之前CEO蒂姆·库克也曾面临过这种局面。所以可以看出此次XcodeGhost木马事件非同小可,毕竟影响范围非常大,特别涉及到了国内市场。 在席勒看来,此次事件其实是几个因素共同造成的,苹果有Gatekeeper及相关签名验证机制防护,但这次山寨应用的进入、以及Gatekeeper被关闭,使得黑客有机可乘。 针对未来的防护机制,由于Xcode服务器一直在国外,所以导致了中国开发者下载时间较长,这就使得部分开发者选择一些非官方渠道下载,使得这一环节有机可乘,为了杜绝此类事件,席勒确定苹果将把Xcode开发工具的下载从国外放到国内,这是苹果在服务方面***次确认将下载放到国内。 这次持续大约30分钟的谈话中,席勒没有给出确定的时间...
- 下一篇
小米移动想做副卡?雷军在下一盘大棋
【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 9月22日下午,小米科技发布了***手机产品小米4C。事或凑巧,一天之后的9月23日,魅族将发布今年的旗舰机Pro5。北京五洲皇冠国际酒店内,两排身穿黑衣的保安将一楼大堂区隔开来,左边黑色背景板下是魅族pro5新品发布的广告牌,而右边白色背景板下是小米旗舰新品4C发布会。 在雷军和黄章在微博上大打口水仗才没几天,两场针尖对麦芒的发布会无疑成功吸引了业界的注意。 发布会上,依旧一套凡客套装的雷军将这部小米手机4C称之为“安卓小王子”。作为今年4月份面向国际市场发布的小米4i的升级版,小米4C采用了2015年第二季度发布的***的64位高通骁龙808处理器、全网通2.0(覆盖了中国移动 、联通、电信的所有2G / 3G / 4G 网络制式,支持双卡双待及LTE+CDMA1x 网络连接,使用时不用再区分主、副卡,当电信卡与移动、联通卡同时使用时都可选择4G网络)的5英寸1080P屏幕、1300万索尼摄像头、边缘触控、红外遥控、高铁模式、智能漫游加速等,售价1299元起。 为了削减过往小米手机高性价比的刻板印象,雷军对这款...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8