UIStackView:添加相同宽度的排列视图
Posted
技术标签:
【中文标题】UIStackView:添加相同宽度的排列视图【英文标题】:UIStackView: add arranged views with the same width 【发布时间】:2017-06-09 12:05:02 【问题描述】:我有 UIStackView 并想在这个视图中添加一些排列的视图......有时是一个,有时是两个,三个......等等。 UIStackView 有全宽。我希望排列的视图具有相同的宽度,左对齐,这样它们就不会填满 UIStackView 的整个宽度。
这就是我所拥有的:
这就是我想要的:
是否有可能以某种方式做到这一点,或者我是否需要根据我添加的排列数量来更改 UIStackVIew 的宽度?
我的代码:
// creating views
stackView =
let v = UIStackView()
v.axis = .horizontal
v.alignment = .center
v.distribution = .fillEqually
v.spacing = 5
v.translatesAutoresizingMaskIntoConstraints = false
return v
()
if let img = chosenImage
let imageView: UIImageView =
let l = UIImageView()
l.translatesAutoresizingMaskIntoConstraints = false
l.image = img
return l
()
self.stackView?.addArrangedSubview(imageView)
imageView.addConstraint(NSLayoutConstraint(item: imageView, attribute: .width, relatedBy: .equal, toItem: imageView, attribute: .height, multiplier: 1, constant: 1))
imageView.setNeedsUpdateConstraints()
else
print("Something went wrong")
【问题讨论】:
如何指定视图的宽度?是固定值吗? @UpholderOfTruth 我已将代码示例添加到我的问题中。 这行不通。您已设置堆栈视图,使其排列的视图以 5pt 间距均匀填充。然后对于图像,您将高度设置为等于宽度 + 1pt。所以宽度将通过划分堆栈视图的宽度来确定,然后相应地调整高度。我认为最好的方法已经添加了更清晰的视图和内容拥抱和抵抗。 【参考方案1】:在storyboard上,选择stackview,Attributes inspector -> Stackview -> Distribution,选择Fill Equally。
【讨论】:
【参考方案2】:您可以在最后为您的 StackView 添加一个空的清晰视图,并为此视图设置拥抱和抵抗优先级。它应该调整到可用空间,因此“填充视图”的拥抱优先级必须更高,“填充视图”的阻力应该较低,在您的真实项目上将阻力设置为更高的值
【讨论】:
如何设置拥抱和抵抗优先级?你能解释一下吗? 我在回答中添加了照片以上是关于UIStackView:添加相同宽度的排列视图的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIStackView 内排列的子视图上设置自定义高度?
当 UIStackView 更改其排列的子视图时,UITableViewCell 不会调整大小