UIStackView

本文详细介绍了iOS9中引入的UIStackView组件,探讨了如何利用StackView简化布局管理,包括其核心特性如自动创建AutoLayout约束、配置subview大小与间距等。此外还讲解了如何通过Axis、Alignment和Distribution等属性进行高级定制。
一、iOS9.0新特性
Stack View的核心便是方便垂直或水平排布多个subview

  • Stack View最有用的就是它会自动为每个subview创建和添加Auto Layout constraints。
  • 当然你可以控制subview的大小和位置。
  • 可以通过选项配置subview的大小、排布以及彼此间的间距。

二、UIStackView属性
Axis表示Stack View的subview是水平排布还是垂直排布。
Alignment控制subview对齐方式。      Alignment 用于控制 X 和 Y值
Distribution定义subview的分布方式。Distribution 用于控制高度和宽度。
Spacing 为subview间的最小间距。


Stack View会被当成Container View。所以它是一个不会被渲染的UIView子类。
它不像其他UIView子类一样,会被渲染到屏幕上。
这也意味着设置其backgroundColor属性或重载drawRect:方法都不会产生任何效果。

subView和arrangedSubView
开始使用Stack View前,我们先看一下它的属性
subViews和arrangedSubvies属性的不同。
如果你想添加一个subview给Stack View管理,
你应该调用
addArrangedSubview:
insertArrangedSubview:atIndex:
arrangedSubviews数组是subviews属性的子集。

要移除Stack View管理的subview,需要调用
removeArrangedSubview:
removeFromSuperview。
移除arrangedSubview只是确保Stack View不再管理其约束,而非从视图层次结构中删除,理解这一点非常重要。
UIStackView是从iOS 9开始,苹果提供用于布局的工具,类似于安卓的线性布局,可利用自动布局创建能动态适应设备方向、屏幕尺寸和可用空间变化的用户视图,当子视图改变时可自动调整,省去大量代码[^1][^3]。 ### 创建UIStackView 可通过xib和纯代码两种方式创建使用UIStackView。以下是纯代码创建的示例: ```swift let stackView = UIStackView() view.addSubview(stackView) stackView.axis = .horizontal stackView.distribution = .fillEqually stackView.spacing = 10 stackView.alignment = .fill stackView.frame = CGRect(x: 0, y: 100, width: view.frame.width, height: 300) let view1 = UIView() stackView.addArrangedSubview(view1) view1.backgroundColor = .blue let view2 = UIView() stackView.addArrangedSubview(view2) view2.backgroundColor = .yellow let view3 = UIView() stackView.addArrangedSubview(view3) view3.backgroundColor = .red ``` ### 关键属性理解 在学习UIStackView过程中,其相关属性尤其是`distribution`的几个属性值需要理解。不同的属性值会影响子视图在栈视图中的布局方式,例如`distribution = .fillEqually`会使所有子视图在栈视图的轴方向上平均分配空间[^2][^3]。 ### 使用中的问题 在使用UIStackView时会遇到一些坑,比如多层嵌套的情况,将UIStackView多层嵌套时还没有很好的解决办法。在table cell中使用时,若在第二层嵌套UIStackView可能会出现显示问题,将第二层的UIStackView换成view,里面再装一个UIStackView,情况类似;并且在里面垂直排布的label加约束后,显示情况也和嵌套UIStackView时一样[^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值