【问题标题】:UITableViewCell and repositioning UILabels in the cellUITableViewCell 和在单元格中重新定位 UILabel
【发布时间】:2014-04-25 17:17:27
【问题描述】:

我有一个UITableView,我有不同高度的单元格。我已经覆盖了heightForRowAtIndexPath,并且在调用[lb sizeToFit] 后通过确定UILabel 的高度来计算正确的高度。我得到了每个单元格的正确高度,但我对重新定位 UILabel 的最佳位置 r= 的位置有点模糊。

我试图在cellForRowAtIndexPath 中重新定位它们,但这似乎不起作用。那么,在我走得太远之前,这是正确的地方吗?表面上看是行不通的。

问题:cellForRowAtIndexPath 是调整控件大小和移动控件的正确位置吗?

感谢您的帮助。

【问题讨论】:

  • 你真的需要吗?您使用的是什么自动布局/调整大小?
  • 大声笑,这是个好问题。我的主要问题是我在每个单元格的 UILabel 中显示文本。但是,由于每个单元格的文本长度不同,并且 UILabel 是固定高度,所以单元格之间有很大的空间。我需要在 UILabel 上调用 sizeToFit 以获得正确的高度,然后将 UILabel 下的其他控件向上移动,以便单元格正确显示……有意义吗?

标签: ios uitableview autolayout autoresizingmask


【解决方案1】:

创建您自己的UITableViewCell 子类,并覆盖layoutSubviews。记得拨打[super layoutSubviews]。然后为您显示的任何内容量正确布局单元格。 (假设单元格将被赋予正确的框架)

heightForRowAtIndexPath: 中,您需要根据单元格内容的布局方式执行相同的计算。

【讨论】:

    【解决方案2】:

    确定标签需要的大小并从您的表委托方法返回该高度。

    在单元格中,将标签固定到超级视图(单元格内容视图)的边缘。您可以使用自动调整大小的蒙版(灵活的宽度 + 高度)或自动布局来做到这一点。无论哪种情况,这都会使标签自动调整为正确的框架,而无需您执行任何其他操作。

    【讨论】:

      【解决方案3】:

      如果您可以使用自动布局,那么我认为@Wain 是最好的主意。有时布局对于自动布局来说可能过于复杂,在这种情况下,您需要在代码中完成。

      代码在哪里?您在cellForRowAtIndexPath: 中执行此操作的想法完全可以。请记住,单元格会以其他行遗留的任意状态出队,因此您不应依赖初始条件。例如

      UILabel *label3 = (UILabel *)[cell viewWithTag:100];
      // give the subviews constant tags (not dependent on row for example)
      
      if (/* this is a short cell, so the third label must be hidden */) {
          label3.alpha = 0.0;
      }
      // NOT DONE YET!
      

      由于我们不知道 label3 出列时的状态,因此我们必须通过提供 else 块作为 if 块的补充来涵盖所有条件。

      else {
          // it must be a taller cell
          // or else if, if there are other sizes of cells, etc.
          label3.alpha = 1.0;
      }
      

      这可能会涉及很多,您可能会发现在您自己的 UITableView 子类中重新定位此布局逻辑更具可读性,这是@NickGalasso 的好建议。

      【讨论】:

        猜你喜欢
        • 2017-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-12
        • 1970-01-01
        • 2015-01-09
        相关资源
        最近更新 更多