全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

iOS9新特性之UIStackView

1. UIStackView相关属性理解

UIStackView是iOS9之后推出的,我也是第一次接触,在学习的过程中对于其中的相关属性,尤其是对其中的distribution几个属性值,一知半解的,所以特写此文通过代码实例理解它们每个属性的区别。

UIStackView主要包括了四大属性:axis、alignment、distribution、spacing。

一、axis

主要设置UIStackView布局的方向:水平方向或垂直方向。

typedef NS_ENUM(NSInteger, UILayoutConstraintAxis) {
UILayoutConstraintAxisHorizontal = 0,//水平
UILayoutConstraintAxisVertical = 1//垂直
};

二、alignment

主要设置非轴方向子视图的对齐方式。

typedef NS_ENUM(NSInteger, UIStackViewAlignment) {
UIStackViewAlignmentFill,//子视图填充StackView
UIStackViewAlignmentLeading,//子视图左对齐(axis为垂直方向而言)
UIStackViewAlignmentTop = UIStackViewAlignmentLeading,//子视图顶部对齐(axis为水平方向而言)
UIStackViewAlignmentFirstBaseline, // 按照第一个子视图的文字的第一行对齐,同时保证高度最大的子视图底部对齐(只在axis为水平方向有效)
UIStackViewAlignmentCenter,//子视图居中对齐
UIStackViewAlignmentTrailing,//子视图右对齐(axis为垂直方向而言)
UIStackViewAlignmentBottom = UIStackViewAlignmentTrailing,//子视图底部对齐(axis为水平方向而言)
UIStackViewAlignmentLastBaseline, // 按照最后一个子视图的文字的最后一行对齐,同时保证高度最大的子视图顶部对齐(只在axis为水平方向有效)
} NS_ENUM_AVAILABLE_IOS(9_0);

具体显示效果如下:


fill
top
center
bottom
first base line

三、distribution

设置轴方向上子视图的分布比例(如果axis是水平方向,也即设置子视图的宽度,如果axis是垂直方向,则是设置子视图的高度)。

typedef NS_ENUM(NSInteger, UIStackViewDistribution) {
UIStackViewDistributionFill = 0,
UIStackViewDistributionFillEqually,
UIStackViewDistributionFillProportionally,
UIStackViewDistributionEqualSpacing,
UIStackViewDistributionEqualCentering,
} NS_ENUM_AVAILABLE_IOS(9_0);

下面以axis=UILayoutConstraintAxisHorizontal,

alignment=UIStackViewAlignmentCenter为例:往UIStackView中添加三个UIView,第一个UIView设为40100,第二个UIView设为8080,第一个UIView设为120*60,通过实例来说明每个属性的区别:

(1)UIStackViewDistributionFill = 0,默认属性,轴方向上填充UIStackView。如果axis为水平方向,则所有子视图的宽度等于UIStackView的宽,所以如果只有一个子视图,则子视图的宽度就等于UIStackView的宽,如果有两个子视图,且优先级一样,则会拉伸或压缩某个子视图,使两个子视图的宽度之和等于UIStackView的宽……,如果axis是垂直方向,则所有子视图的高度等于UIStackView的高,必要时会拉伸或压缩某个子视图。

上面是在子视图优先级一致的情况下,如果子视图优先级不一致,则会按优先级从高到低设置子视图的位置,对优先级最低的子视图进行必要的拉伸或压缩。

设置distribution=UIStackViewDistributionFill后显示效果:

UIStackViewDistributionFill

如图所示,由于三个子视图的宽度之和不够UIStackView的宽度,优先级又一致,所以第三个子视图被拉伸了。当然,我们可以修改某个子视图的优先级来让其被拉伸。

(2)UIStackViewDistributionFillEqually,该属性设置后使所有子视图在轴方向上等宽或等高。即如果是水平方向,所有子视图都会被必要的拉伸或压缩,使得每个子视图的宽度一致,原来设置的子视图的宽度都会被忽略;如果是垂直方向,所有子视图的高度也会保持一致,如下所示:

UIStackViewDistributionFillEqually

(3)UIStackViewDistributionFillProportionally 该属性设置后会根据原先子视图的比例来拉伸或压缩子视图的宽或高,如实例中三个子视图原先设置的宽度是1:2:3,所以水平方向上显示时,会按照这个比例进行拉伸,如下图所示,拉伸后的宽度依然是1:2:3。

UIStackViewDistributionFillProportionally

(4)UIStackViewDistributionEqualSpacing 该属性会保持子视图的宽高,所有子视图中间的间隔保持一致。如下图所示,图中子视图的间隔(绿线所示的长度)都是一致的。


UIStackViewDistributionEqualSpacing

(5)UIStackViewDistributionEqualCentering 该属性是控制所有子视图的中心之间的距离保持一致,如下图所示,子视图中心点之间的间隔(绿线所示的长度)是一致的。

UIStackViewDistributionEqualCentering

四、spacing 该属性控制子视图之间的间隔大小,在distribution前三个属性值设置的情况下,子视图之间是没有间隔,我们可以通过spacing属性显式的设置,如下图在distribution=UIStackViewDistributionFillEqually情况下,设置子视图间隔为10,子视图之间间隔都为10,且子视图依然等宽。

spacing=10

2.进阶

我们可以从Interface Builder右侧的操作面板中,选择UIStackView控件直接拖到XIB中。可以选择Horizontal和Vertical两个方向的UIStackView,也可以在拖到XIB中之后手动修改。

然后将两个View拖到这个UIStackView中,父视图也可以将UIStackView作为子视图来进行多层UIStackView嵌套,这也是苹果推荐的做法。

打开右侧设置面板来设置UIStackView的一些属性,达到更好的布局效果。

除了上面的方法也可以在XIB中直接选择多个View,然后点击右下方的Stack按钮,系统会自动推断布局方式,帮我们自动布局子视图,我们可以在系统布局之后在手动进行调整。

代码布局其实本质上就是对数组进行操作,数组中存储的是UIStackView的子视图。然后通过设置UIStackView的枚举值属性进行页面排布。代码布局的方式这里就不演示了。。。😉

UIStackView和NSLayoutConstraint布局转换

如果你之前的项目中已经有约束,只需要将添加UIStackView管理UI控件约束清除。选中需要添加的UI控件,点击右下方的Stack按钮就可以。

总结

以上所述是小编给大家介绍的iOS9新特性之UIStackView,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# ios9  # 新特征  # uistackview  # Objective-C的UIStackView常用属性函数学习笔记  # iOS界面布局简化UIStackView使用详解  # Android开发之StackView用法和遇到的坑分析  # iOS App开发中的UIStackView堆叠视图使用教程  # Stack View自定义间隙减少约束的数量  # 所示  # 我们可以  # 设为  # 如下图  # 拖到  # 第一个  # 情况下  # 只在  # 则会  # 小编  # 显示效果  # 的是  # 都是  # 进阶  # 几个  # 如果你  # 是在  # 也会  # 尤其是  # 多个 


相关文章: 怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  高端云建站费用究竟需要多少预算?  建站之星客服服务时间及联系方式如何?  建站主机如何选?高性价比方案全解析  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何通过宝塔面板实现本地网站访问?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  小程序网站制作需要准备什么资料,如何制作小程序?  如何制作一个表白网站视频,关于勇敢表白的小标题?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何在香港服务器上快速搭建免备案网站?  如何快速搭建高效简练网站?  免费网站制作appp,免费制作app哪个平台好?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  网站专业制作公司有哪些,做一个公司网站要多少钱?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  广平建站公司哪家专业可靠?如何选择?  ,网站推广常用方法?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星如何实现网站加密操作?  如何在阿里云香港服务器快速搭建网站?  购物网站制作公司有哪些,哪个购物网站比较好?  建站之星代理商如何保障技术支持与售后服务?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  nginx修改上传文件大小限制的方法  建站上市公司网站建设方案与SEO优化服务定制指南  如何在橙子建站中快速调整背景颜色?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何配置IIS站点权限与局域网访问?  三星网站视频制作教程下载,三星w23网页如何全屏?  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何快速搭建虚拟主机网站?新手必看指南  如何确保FTP站点访问权限与数据传输安全?  相册网站制作软件,图片上的网址怎么复制?  如何用VPS主机快速搭建个人网站?  建站主机选虚拟主机还是云服务器更好?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  如何快速搭建响应式可视化网站?  如何高效搭建专业期货交易平台网站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  宝塔面板如何快速创建新站点?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  实例解析Array和String方法  昆明网站制作哪家好,昆明公租房申请网上登录入口?  建站主机选购指南:核心配置优化与品牌推荐方案 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。