【问题标题】:UIStackView adjust height to subviewsUIStackView 调整高度到子视图
【发布时间】:2016-11-19 20:09:06
【问题描述】:

我希望 UIStackView 调整大小以适应它们的子视图(本例中为 UIImageView 和 UILabel)

    let headerView = UIStackView()
    headerView.axis = .vertical
    headerView.alignment  = .center
    headerView.distribution = .equalSpacing
    headerView.spacing = 10

    let headerImage = UIImageView(...)
    headerImage.contentMode = .scaleAspectFill
    headerImage.clipsToBounds = true
    headerImage.frame = CGRect(x: 0, y: 0, width: tableView.frame.width, height: tableView.frame.width / 1.618)

    let desciptionView = UILabel()
    desciptionView.text = "Some very long text wrapping multiple lines..."
    desciptionView.numberOfLines = 0
    desciptionView.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.body)

    headerView.addArrangedSubview(headerImage)
    headerView.addArrangedSubview(desciptionView)

    print(headerView.bounds) // always 0,0,0,0
    print(headerView.frame) // always 0,0,0,0

    tableView.tableHeaderView = headerView

(在此代码中高宽均为0)

如何实现想要的行为?

【问题讨论】:

  • headerView.alignment = .fill?
  • 我希望this answer -somehow- 对你有所帮助。
  • 您的视图正在折叠,因为它们没有任何约束可以保持其原始框架完整。尝试在堆栈视图的视图中添加一些 NSLayoutConstraints
  • 哪些约束是必要的?

标签: ios swift uitableview uikit uistackview


【解决方案1】:

我发现这样做的唯一方法是将子视图的内容拥抱和抗压缩优先级设置为必需,如下所示:

    let arrangedViews = [filterLabel, image]
        .map { (view: UIView) -> UIView in
            view.setContentHuggingPriority(.required, for: .horizontal)
            view.setContentCompressionResistancePriority(.required, for: .horizontal)
            return view }

    let stack = UIStackView(arrangedSubviews: arrangedViews)
    stack.axis = .horizontal
    stack.distribution = .fill
    stack.spacing = 8

在排列好的子视图上设置这些,你确实(或者至少我做到了)得到了想要的结果。

【讨论】:

  • 以防万一您对stackview有高度限制,必须将其优先级设置为500。但这是一个很好的答案,应该标记为正确答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
相关资源
最近更新 更多