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