医院网站建设的要求,wordpress meiwen主题,刚刚刚刚刚刚刚刚刚刚刚刚刚刚刚,上海市电话黄页本UIStackView UIStackView是基于自动布局AutoLayout#xff0c;创建可以动态适应设备方向、屏幕尺寸和可用空间的任何变化的用户界面。UIStackView管理其ArrangedSubview属性中所有视图的布局。这些视图根据它们在数组中的顺序沿堆栈视图的轴排列。由axis, distribution, align…UIStackView UIStackView是基于自动布局AutoLayout创建可以动态适应设备方向、屏幕尺寸和可用空间的任何变化的用户界面。UIStackView管理其ArrangedSubview属性中所有视图的布局。这些视图根据它们在数组中的顺序沿堆栈视图的轴排列。由axis, distribution, alignment, spacing等属性改变。 有点类似前端的flex布局Apple从很早就引入了但是实际使用的人太少了接下来的文章将引用部分Apple官方文档介绍 只需要定义UIStackView的位置positionsize是可选的。 当没有设置size的时候会根据它的内容的大小来调整自己的大小即子视图各个控件的大小决定了UIStackView的大小 UIStackView的布局受到本身frame或者AutoLayout的影响包括子组件的AutoLayout的影响 设置子组件大小只能使用Auto Layout为UIStackView设置大小位置可以采用Frame、Auto Layout 需要设置axis, distribution, alignment, spacing属性并通过addArrangedSubview添加子组件
基本使用
固定一个位置和大小的UIStackView添加三个等大且间隔为10的子组件 // UIStackViewUIStackView *stackView [[UIStackView alloc] init];stackView.backgroundColor UIColor.redColor;stackView.frame CGRectMake(0, 100, 390, 100);stackView.spacing 10;stackView.axis UILayoutConstraintAxisHorizontal;// 水平方向stackView.distribution UIStackViewDistributionFillEqually;// 垂直方向stackView.alignment UIStackViewAlignmentFill;[self.view addSubview:stackView];// 添加子组件UIView *view1 [[UIView alloc] init];view1.backgroundColor UIColor.grayColor;UIView *view2 [[UIView alloc] init];view2.backgroundColor UIColor.yellowColor;UIView *view3 [[UIView alloc] init];view3.backgroundColor UIColor.blueColor;// 必须使用的特殊添加方式[stackView addArrangedSubview:view1];[stackView addArrangedSubview:view2];[stackView addArrangedSubview:view3];属性介绍
Axis设置内部子组件堆叠方式水平/垂直方向Alignment与axis方向相反的方向的布局规则Axis会影响其设置方向distribution与axis方向相同的方向的布局规则Axis会影响其设置方向spacing设置默认间隔UIStackViewDistributionEqualSpacing/UIStackViewDistributionEqualCentering情况下spacing为最小间距
Alignment属性具体介绍
下面默认举例采用Axis是水平则Alignment代表的是垂直方向的布局规则Axis是垂直则相反
UIStackViewAlignmentFill默认方式垂直方向填充满UIStackView UIStackViewAlignmentCenter垂直方向居中对齐 UIStackViewAlignmentTop / UIStackViewAlignmentLeading 垂直方向顶部对齐 UIStackViewAlignmentBottom / UIStackViewAlignmentTrailing 垂直方向底部对齐 UIStackViewAlignmentFirstBaseline垂直方向对齐第一个子组件的头部 UIStackViewAlignmentLastBaseline垂直方向对齐最后一个子组件的尾部
distribution属性具体介绍
下面默认举例采用Axis是水平则distribution代表的是水平方向的布局规则Axis是垂直则相反吗space代表的是实际间隔spaceing代表的是设置的间隔
UIStackViewDistributionFill子组件填充满整个UIStackViewspacespaceing
使用方法UIStackView只需要确定AutoLayout位置为子组件添加AutoLayout的大小用来确定UIStackView的大小 UIStackViewDistributionFillEqually每个子组件宽度相等且填充满整个UIStackViewsapcespaceing
使用方法1UIStackView只需要确定AutoLayout位置为一个子组件添加AutoLayout的大小用来确定UIStackView的大小使用方法2UIStackView需要确定AutoLayout位置和大小默认为子组件生成相等大小 UIStackViewDistributionFillProportionally根据space和每个组件的Size分配每个子组件的宽度最终也是填充满整个UIStackView
使用方法1UIStackView只需要确定AutoLayout位置为每个子组件添加AutoLayout的大小用来确定UIStackView的大小使用方法2UIStackView需要确定AutoLayout位置和大小为每个子组件添加AutoLayout的大小最终根据算法确定每个子组件的比例好坑效果难以达到预期的或许有更高级的用法❓欢迎留言讨论 UIStackViewDistributionEqualSpacing根据每个组件的Size分配每个子组件的宽度达到间隔相等的情况特殊在通过拉伸space存在实际spacespacing的情况使用方法1UIStackView只需要确定AutoLayout位置为每个子组件添加AutoLayout的大小用来确定UIStackView的大小spacespacing使用方法2UIStackView需要确定AutoLayout位置和大小为每个子组件添加AutoLayout的大小最终根据算法确定每个子组件的比例空间充足则拉伸spacespacespacing空间不足则缩小子组件的Size
UIStackViewDistributionEqualCentering 子组件中心点之间的距离相等特殊在通过拉伸space存在实际spacespacing的情况
使用方法1UIStackView只需要确定AutoLayout位置为每个子组件添加AutoLayout的大小用来确定UIStackView的大小通过拉伸space来达到子组件中心点之间的距离相等spacespacing使用方法2UIStackView需要确定AutoLayout位置和大小为每个子组件添加AutoLayout的大小通过拉伸space和Size来达到子组件中心点之间的距离相等spacespacing 总结根据实际情况去选择合适的distribution和Alignment属性为子组件添加合适的Auto Layout为UIStackView添加合适的Auto Layout 可以达成任何你想要的动态效果
参考资料
Apple Developer iOS - UIStackView的使用 UIStackView 入坑指南