我的一个表格设置中有一个tableview单元格,其中包含以下视图层次结构

ios - UITableViewCell内的嵌套UIStackViews内的UILabel有时会被截断-LMLPHP

外部水平stackview固定在单元的内容视图的尾部,前缘,底部和顶部边缘。

正确的标签固定在其后缘,前缘,底部和顶部边缘的父stackViewHackView上

在我的控制器代码中,我将单元格设置为动态高度以适合单元格的内容,以便它们可以根据内容大小而增长或缩小

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 30.0

关于自动版面设置。 ( BOLD 中的相关优先级)
  • 外部水平堆栈视图
  • 内容拥抱优先级== 250
  • 内容压缩抵抗优先级== 750
  • 内部垂直堆栈视图
  • 内容拥抱优先级== 750
  • 内容压缩优先级== 750
  • 左标签1
  • 内容拥抱优先级== 750
  • 内容压缩优先级== 750
  • 左标签2
  • 内容拥抱优先级== 750
  • 内容压缩优先级== 750
  • 视图(只需在堆栈视图的顶部填充两个左标签)
  • 内容拥抱优先级== 250
  • 内容压缩抵抗优先级== 小时:750; v:250
  • stackViewHackView(用于使多行标签在堆栈视图和单元格内正确增长的hack)
  • 内容拥抱优先级== 250
  • 内容压缩抵抗优先级== 小时:250; v:750
  • 降低水平阻力,以允许此视图压缩到左侧堆栈视图以适合
  • 右标签
  • 内容拥抱优先级== 250
  • 内容压缩抵抗优先级== 小时:250; v:750
  • 降低水平阻力,以允许此视图压缩到左侧堆栈视图以适合

  • 我在带有以下代码的简单测试应用程序中用测试数据填充此单元格
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
      let cell = tableView.dequeueReusableCell(withIdentifier: "testCell", for: indexPath) as! TestTableViewCell
    
    
      // Configure the cell...
    
      if indexPath.section == 0
      {
        cell.leftLabel1?.text = "Label1 aabbccdd"
        cell.leftLabel2?.text = "Label2 aabbccdd"
        cell.rightLabel?.text = "Cell \(indexPath.row) with a 'really really' long string that needs displaying clearly and causing the table cell to resize to fit the content. We're looking for about 3 or 4 lines of text to be displayed"
      }
      else if indexPath.section == 1
      {
        cell.leftLabel1?.text = "Label1 aabbccdd"
        cell.leftLabel2?.text = "Label2 aabbccdd"
        cell.rightLabel?.text = "Cell \(indexPath.row) with a 'really really really' long string that needs displaying clearly and causing the table cell to resize to fit the content. We're looking for about 3 or 4 lines of text to be displayed"
      }
      else
      {
        cell.leftLabel1?.text = "Label1 aabbccdd"
        cell.leftLabel2?.text = "Label2 aabbccdd"
        cell.rightLabel?.text = "Cell \(indexPath.row) with a 'really really really really really really really really' long string that needs displaying clearly and causing the table cell to resize to fit the content. We're looking for about 3 or 4 lines of text to be displayed"
      }
    
      return cell
    }
    

    这会导致在iPhone 7目标上的模拟器中呈现以下内容

    ios - UITableViewCell内的嵌套UIStackViews内的UILabel有时会被截断-LMLPHP

    中间的tableview单元格是我一直想要得到的输出。我不希望左侧标签被截断,它们的内容将始终足够小以适合右侧。然而,鉴于右侧的某些内容,较长的Label 2有时会被截断,就像您在顶部和底部的行中看到的那样。

    我已经设置了内容压缩抗性,以使左侧的所有元素都具有较高的抗压缩性,而右侧的元素被设置为较低的抗性,以便它们应压缩以为左侧元素留出空间。

    有什么想法为什么会发生或如何阻止它发生,以便我的标签始终正确显示?

    干杯!

    最佳答案

    (根据OP添加为答案)

    这可能只是“在我看来”,但是...当有约束的简单视图可以完成工作时,我已经看到许多人使用包裹在包裹视图中的包裹视图。

    看看我在这个项目中是如何做到的:github.com/DonMag/CellTest2

    这真的非常简单,您可以查看标签,看看在更改优先级方面我要做的事很少。我使用了示例字符串,并添加了更多案例来测试变体。

    关于ios - UITableViewCell内的嵌套UIStackViews内的UILabel有时会被截断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44912976/

    10-09 13:55