【问题标题】:Have UITableViewCell resize itself with autolayout让 UITableViewCell 使用自动布局调整自身大小
【发布时间】:2013-08-27 23:47:08
【问题描述】:

我在 UITableViewCell 中有 3 个标签,并设置了标签,以便它们自动换行。如果他们自动换行,则文本将进入下一个单元格。如何让 AutoLayout 根据内容展开单元格,而无需在 heightForRowAtIndex 方法中编写代码?难道没有一个约束我可以用来根据 contentView 自动调整单元格吗?

如果文本不包含在标签中,则单元格看起来很好。一旦包裹起来,就是问题发生的时候,我想让单元格调整大小以适应内容,并且底部标签和底部之间的间距与顶部和顶部标签之间的间距相同。

【问题讨论】:

    标签: ios objective-c uitableview autolayout


    【解决方案1】:

    很遗憾,您不能这样做。表格视图首先计算自己的总高度,并且在加载时对每个单元格的大小有一个固定的概念,它不会从外向内确定它的高度,也不会让布局约束改变单元格的高度。

    如果您考虑表格是如何工作的,以及单元格重用,那么如果不加载每个单元格并将其添加到滚动视图,并对整个内容执行布局传递,您就无法真正根据其单元格调整表格大小。这可能会导致性能很差。

    您可以尝试填充“空闲”单元格(即您刚刚实例化的单元格,未添加到表中)并在计算 heightForRow 时为数据源中的每一行布置它。

    【讨论】:

    • 我自己使用一个空闲的单元格。但最好使用几个单元格,或者您自己管理表格视图中的单元格数量。
    • 当您说免费单元格时,您的意思是在代码中创建它?所以我想我需要做label1.size.height + label2.size.height + label3.size.height + topPadding + bottomPadding 那将是单元格的高度?还是我需要为每个单元格做 constraintToSize?
    • 我的意思是,在代码中创建一个单元格,填充它,然后调用 [layoutIfNeeded] 来确定大小。如果您的约束设置正确,那么这应该计算出显示内容所需的单元格的确切大小。
    【解决方案2】:

    在加载单个单元格时,在填充标签之后,但在加载单元格实例之前,请检查标签高度。

     Something like:
         cell.frame.size.height
    

    如果高度足够大,您知道标签已经换成了两行,那么增加您要加载的单元格的高度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2014-05-22
      • 2014-02-08
      • 2014-08-19
      • 2019-09-07
      • 2021-03-22
      相关资源
      最近更新 更多