【问题标题】:Is there any way to set cell's height after it's components loads but before it displays?有没有办法在组件加载之后但在显示之前设置单元格的高度?
【发布时间】:2017-02-08 23:02:08
【问题描述】:

我有一个 tableView 和一个自定义原型 cell。这个cell 有三个labels(标题、价格、详细信息),每个都使用CoreData 加载它的文本,所以它们的高度不是恒定的。

heightForRow atIndexPathcellForRow atIndexPath 之前执行,所以我只能为所有单元格设置一个高度。但我需要它们都有不同的大小。
我尝试的是在cellForRow atIndexPath 我得到所有标签的高度并将其交付给tableView.rowHeight。不幸的是,它将所有单元格设置为具有相同的高度。

我的问题是: 是否有任何方法或方法可以分别设置每个单元格的高度,具体取决于它需要多少空间来显示里面的所有标签?

【问题讨论】:

  • 您是否尝试过任何来自互联网的方法?
  • 这被列为 SO 中 iOS 标签中最受欢迎的问题之一。搜索如何为单元格设置自动尺寸,您会找到答案。
  • 其实我试过你们两个描述的研究,但找不到任何令人满意的答案,所以我的问题来了。

标签: ios swift uitableview


【解决方案1】:

在视图加载后试试这个

    self.tableView.rowHeight = UITableViewAutomaticDimension;

 self.tableView.estimatedRowHeight = 44.0; // set to whatever your "average" cell height is

【讨论】:

  • 不幸的是,这不是我的答案。它将单元格的高度拉伸到几乎全屏。如果原型单元格中的任何一个约束没有使 rowHeight 这么大,我已经在情节提要中检查了我的约束,但事实并非如此。仍然不知道他们为什么变得如此之大。
【解决方案2】:

我做的是:
- 从头开始​​设置约束(所有项目的边框到单元格的内容视图)
- 按照@rv7284 的建议使用:
tableView.estimatedRowHeight = 150 tableView.rowHeight = UITableViewAutomaticDimension
有一个区别 - 不是viewDidLoad,而是viewWillAppear
所有标签在加载一些文本后都有它们的宽度和高度,并将被放置在 RAM 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多