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 中保留隐藏视图的约束

当 UIStackView 更改其排列的子视图时,UITableViewCell 不会调整大小

当轴垂直时在 UIStackView 的子视图上设置恒定宽度

将视图动态添加到 UIStackview

如何在 `UIStackView` 中排列视图?