【问题标题】:Two stacked dynamic height labels in UITableViewCellUITableViewCell 中两个堆叠的动态高度标签
【发布时间】:2019-03-03 10:42:03
【问题描述】:

我试图在 UITableViewCell 中堆叠两个标签。我在我的 tableView 上设置了 AutomaticDimension 和estimatedRowHeight。

我希望单元格堆叠显示,如果它们都有内容,则它们的动态高度。

如果只有一个有内容,我希望它在单元格中居中,或者让单元格折叠以仅显示该标签。

我已经尝试了所有我能想到的约束组合,但通常标签要么不扩展,要么在标签应该在的地方出现填充空间。

如果标签没有文字,我设置label.text = ""

每次设置文本时,我都会在标签上调用sizeToFit()

什么是正确的约束组合?这是我目前必须开始的。

【问题讨论】:

  • 使用堆栈视图?
  • 为什么标签@750优先级之间的约束?另外,你有没有把numberOfLines 设置为0

标签: ios swift uitableview autolayout uistoryboard


【解决方案1】:
  • 您必须制作两个带有前导、尾随、顶部和底部约束的标签,并且不要添加高度约束

  • 使标签的行数 = 0

  • 检查标题标签并从尺寸检查器菜单中单击垂直内容拥抱优先级为 250 而不是 251,如屏幕所示

image

  • 在 viewController 中连接你的 tableview 并添加这些行

    self.tableView.rowHeight = UITableViewAutomaticDimension self.tableView.estimatedRowHeight = 44

【讨论】:

    【解决方案2】:

    这可以在 iOS 中使用 StackViews 来完成,

    在情节提要中选择您的两个标签并将它们嵌入UIStackView

    如果你声明了一个好的约束,它应该自动处理请求的行为的好处之一。

    我推荐这个教程开始使用UIStackViewhere

    【讨论】:

      【解决方案3】:

      更好的解决方案是UIStackView

      如果您仍然想使用UILabel,您可以再尝试一件事:

      设置label.text = ""会降低标签的高度,但标签之间的距离限制不会使标签居中。

      为此添加距离约束的参考出口并设置它:

      distanceConstraint.constant = 0
      

      在设置label.text = "" 时以编程方式。

      这会将标签设置为中心的数据。

      希望这会有所帮助。

      【讨论】:

      • 为我解决的是,“更好的解决方案是 UIStackView。”我没有意识到 UIStackView 可以如此轻松地完成这项任务。注意:我确实设置了前导/顶部/尾随/底部边距,并且没有设置高度,这也可能有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 2016-06-28
      • 2014-01-28
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多