UIStackView

Posted 木头Ge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIStackView相关的知识,希望对你有一定的参考价值。

1. 使用UIStackView,要知道,其子视图的很多约束就无效了

2. 使用UIStackView,要知道,需要先把其约束设置好

3. UIStackView的属性:

3.1 alignment

主要设置非轴方向子视图的对齐方式。
typedef NS_ENUM(NSInteger, UIStackViewAlignment) {

UIStackViewAlignmentFill,//子视图填充StackView

UIStackViewAlignmentLeading,//子视图左对齐(垂直方向)

UIStackViewAlignmentTop =UIStackViewAlignmentLeading,//子视图顶部对齐(水平方向)

UIStackViewAlignmentFirstBaseline,// 按照第一个子视图的文字的第一行对齐,同时保证高度最大的子视图底部对齐(水平方向)

UIStackViewAlignmentCenter,//子视图居中对齐

UIStackViewAlignmentTrailing,//子视图右对齐(垂直方向)

UIStackViewAlignmentBottom =UIStackViewAlignmentTrailing,//子视图底部对齐(水平方向)

UIStackViewAlignmentLastBaseline,// 按照最后一个子视图的文字的最后一行对齐,同时保证高度最大的子视图顶部对齐(水平方向)

NS_ENUM_AVAILABLE_ios(9_0);

3.2 distribution 子视图的分布

下面的例子都是以纵向为例

typedef NS_ENUM(NSInteger, UIStackViewDistribution) {

UIStackViewDistributionFill = 0,

UIStackViewDistributionFillEqually,

UIStackViewDistributionFillProportionally,

UIStackViewDistributionEqualSpacing,

UIStackViewDistributionEqualCentering,

} NS_ENUM_AVAILABLE_IOS(9_0);

3.2.1. UIStackViewDistributionFill

Fill,就是填满了。这里分2种情况。

情况1,StackView的大小是固定的,那么,设置好其中元素的约束值,最后一个元素不设置,最后一个元素就会填满

情况2. StackView的大小不是固定的,有一个约束没有设置,假设是高度没有设置,那么,设置它的子视图的高度,StackView的高度就会自动调整到包裹住自己的元素

 

3.2.2. UIStackViewDistributionFillEqually

这个比较好理解,就是会自动调整高度,使它们高度一致。

也是存在2中情况,当stackview的高度有约束时,我们就不需要对子view添加高度约束了,系统会为我们做好。

当stackview的高度没约束时,我们就必须提供某个子view的高度约束,让系统好计算出剩下子view的高度和stackview的高度。

 

3.2.3.UIStackViewDistributionFillProportionally

按照原比例缩放。原比例哪里来?官方文档说,来自intrinsic size,我感觉比较简单的方法还是自己添加约束。

这个属性,一般是stackview的高度有约束,而4个subview的高度也有约束,注意subview的高度约束的priority要低于1000。stackview可以根据subview的约束,计算出比例,进行缩放。

3.2.4.UIStackViewDistributionEqualSpacing 与 UIStackViewDistributionEqualCentering

这2个选项也是应用于stackview高度确定,subview的高度也确定,想让subview比较均匀地分布在stckview中。均匀分布的方法不同,所以有2个选项。

4. 补充

另外,stackview的一个特点是,当把其中的一个子view hidden后,布局会重新渲染,就如同android布局中的 gone 选项,十分好用!省去了以前大把大把的代码。

 

5. 参考

http://www.cnblogs.com/breezemist/p/5776552.html 

http://blog.csdn.net/it_kaka/article/details/52056114

http://blog.csdn.net/hard_man/article/details/50888377

 

以上是关于UIStackView的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式清空 UIStackView

如何通过代码在方向更改时添加对 UIStackView.Axis 的更改?

如何在 `UIStackView` 中排列视图?

UIStackView 中的多行 UILabel 问题

获取 UIStackView 子视图的框架

UITableViewCell 内的 UIStackView