为啥图像视图会拉伸以填充 UIStackView 中宽度的一半?

Posted

技术标签:

【中文标题】为啥图像视图会拉伸以填充 UIStackView 中宽度的一半?【英文标题】:Why is image view stretching to fill half the width in a UIStackView?为什么图像视图会拉伸以填充 UIStackView 中宽度的一半? 【发布时间】:2017-04-15 15:13:28 【问题描述】:

我在水平堆栈视图的左侧使用 UIImageView 和行数设置为 0 的标签。问题是 UIImageView 和标签都填充了相等的空间,即使我已经设置要填充的堆栈视图分布属性。我不希望我的图像视图扩大。改变内容拥抱没有帮助。

【问题讨论】:

【参考方案1】:

问题是:当告诉堆栈视图填充内容区域时,它会尽量做到最好。将分发类型设置为fill 时不知道如何填写。您必须通过图像的自动布局设置宽度约束来提供此信息。然后标签将填充剩余的区域。

【讨论】:

【参考方案2】:

另一种方法是在图像+标签堆栈的右侧添加一个不可见的间隔对象。

private func spacer() -> UIView 
    let stretchingView = UIView()
    stretchingView.setContentHuggingPriority(.defaultHigh, for: .horizontal)
    stretchingView.backgroundColor = UIColor.clear
    stretchingView.translatesAutoresizingMaskIntoConstraints = false
    return stretchingView


private func labelWithImage() -> UIView 
    let image = UIImage(systemName: "map")
    let imageView = UIImageView(image: image)
    let label = UILabel()
    label.text = "3 Miles Away"
    label.font = UIFont.systemFont(ofSize: 17, weight: .regular)
    label.textColor = UIColor.gray
    let stackView = UIStackView(arrangedSubviews: [imageView, label, spacer()])
    stackView.alignment = .leading
    stackView.axis = .horizontal
    return stackView

【讨论】:

以上是关于为啥图像视图会拉伸以填充 UIStackView 中宽度的一半?的主要内容,如果未能解决你的问题,请参考以下文章

水平 UIStackView 拉伸子视图

UIStackView 的子视图具有固有大小,但仍然忽略包含优先级的内容

如何用图像作为背景填充 iOS 堆栈视图(UIStackView)?

UITableviewCell 中的 UIStackview 按比例填充需要不正确的帧

以编程方式填充 UIStackView

将视图添加到将拉伸以填充可用宽度的滚动视图