为啥 UIStackView 调整排列的子视图的大小?
Posted
技术标签:
【中文标题】为啥 UIStackView 调整排列的子视图的大小?【英文标题】:Why UIStackView resize arranged subviews?为什么 UIStackView 调整排列的子视图的大小? 【发布时间】:2018-11-29 06:06:07 【问题描述】:为什么UIStackView
调整子视图的大小?我认为当我将distribution
设置为.fill
时它会起作用。但.equalSpacing
并不暗示这种行为。我是对的?
let stackView = UIStackView()
stackView.alignment = .firstBaseline
stackView.axis = .vertical
stackView.distribution = .equalSpacing
stackView.spacing = 0.0
stackView.translatesAutoresizingMaskIntoConstraints = true
self.view.addSubview(stackView)
stackView.snp.makeConstraints (make) -> Void in
make.top.equalTo(button.snp.bottom)
make.left.equalTo(view).offset(16.0)
make.bottom.equalTo(view)
make.right.equalTo(view).offset(-16.0)
let exampleView = UIView(frame: .zero)
stackView.addArrangedSubview(exampleView)
exampleView.backgroundColor = .yellow
exampleView.snp.makeConstraints (make) in
make.width.equalToSuperview()
make.height.equalTo(60.0)
【问题讨论】:
您不应该在exampleView
上设置width
和height
约束。让stackview
处理它的孩子。
@Kamran 但我想要子视图的固定高度
设置为stackView
。
@AleksandrMaybach - 您希望您的子视图具有特定的高度吗?好的,但是您是否希望它们以更大的间距“展开”以填充视图的高度?例如3 个子视图,每个 60 磅的高度,它们之间可能有 100 磅的垂直间距?或者,您是否想要特定间距,但不填充视图的高度?例如3 个子视图,每个 60 分,垂直间距为 10 分,所以它们总共只能达到 200 分?
没有“展开”。不填,不是什么。只需固定到顶部。
【参考方案1】:
UIStackView
将排列其子视图。
这意味着:
如果您限制其高度(高度限制或顶部和底部限制),它将调整子视图的大小/布局以适合其高度。 如果您不限制其高度,它将使用其子视图高度进行布局。【讨论】:
【参考方案2】:请查看关于UIStackViewDistributionEqualSpacing
的苹果文档堆栈视图定位其排列视图的布局,以便它们沿堆栈视图的轴填充可用空间。当排列的视图没有填满堆栈视图时,它会均匀地填充视图之间的间距。如果排列的视图不适合堆栈视图,它会根据其抗压优先级缩小视图。如果有任何歧义,堆栈视图会根据它们在排列子视图数组中的索引来缩小视图。
https://developer.apple.com/documentation/uikit/uistackviewdistribution/uistackviewdistributionequalspacing?language=objc
【讨论】:
以上是关于为啥 UIStackView 调整排列的子视图的大小?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 UIStackView 不堆叠 UILabel 安排的子视图?
如何在 UIStackView 内排列的子视图上设置自定义高度?