水平StackView中imageView与label的水平间距及获取方法
嘿,刚好在iOS开发里天天跟UIStackView打交道,这两个问题我太熟了,给你详细说清楚~
一、设置水平StackView中UIImageView与UILabel的水平间距
根据你的需求场景,有几种不同的实现方式:
- 全局统一间距:如果整个StackView里的所有相邻子视图都要一样的间距,直接设置StackView的
spacing属性就搞定了,简单粗暴:
// 假设已经创建好了imageView和label let horizontalStackView = UIStackView(arrangedSubviews: [imageView, label]) horizontalStackView.axis = .horizontal // 确保是水平方向 horizontalStackView.spacing = 8 // 这里填你想要的间距数值,比如常用的8pt
- 自定义单个间距:要是只想给imageView和label这一对设置特殊间距(和其他子视图的间距不一样),iOS 11及以后可以用
setCustomSpacing(_:after:)方法,精准控制:
// 在创建好StackView并添加子视图后调用 horizontalStackView.setCustomSpacing(12, after: imageView) // 这样imageView后面的间距就变成12pt,不会影响StackView里其他子视图的间距
- 结合布局边距(可选):如果还需要给整个StackView的四周加边距,同时控制内部子视图的间距,可以开启布局边距关联,再设置边距和间距:
horizontalStackView.isLayoutMarginsRelativeArrangement = true horizontalStackView.layoutMargins = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16) horizontalStackView.spacing = 8 // 子视图之间保持8pt,StackView左右各有16pt边距
二、获取水平StackView中UIImageView与UILabel的水平间距
获取间距也要分情况,因为StackView的间距有全局默认和自定义两种:
- 获取全局默认间距:如果没给imageView设置过自定义间距,直接读取StackView的
spacing属性就是两者之间的间距:
let defaultSpacing = horizontalStackView.spacing
- 获取自定义的单个间距:如果之前用
setCustomSpacing给imageView设置过特殊间距,就用customSpacing(after:)方法来获取这个精准值:
let customSpacing = horizontalStackView.customSpacing(after: imageView) // 要是没设置过自定义间距,这个方法会返回和StackView.spacing一样的数值
⚠️ 小提醒:尽量不要手动给StackView里的子视图添加间距约束,会和StackView自身的布局逻辑冲突,导致不可预料的布局问题。用StackView自带的spacing相关方法才是正道~
内容的提问来源于stack exchange,提问作者Anpas
相关产品推荐
相关产品推荐

