如何从NIB读取UITableViewCell(子类)的高度?

Str*_*pes 7 ios

我有一个在NIB中定义的UITableViewCell(实际上是一个子类).在NIB中我将帧高设置为183,我还将"行高"设置为183并勾选自定义.

在我原来的问题中,这里的一切都出了问题.看起来我的背高度错了,细胞装在错误的高度,然后调整到合适的高度,造成一个令人讨厌的视觉故障.

实际上我做了一些愚蠢的事情(并且总是返回错误的高度),而且我已经太晚了才能弄明白,所以我向SO寻求帮助然后去睡觉.睡觉(+咖啡)让一切都清晰.

因此,对于记录,如果从NIB加载自定义UITableViewCell,您可以查看frame.size.height并返回正确的数字.

如果从中返回错误的数字,则tableView:heightForRowAtIndexPath:可能会出现此故障,至少如果错误的单元格是表格中的最后一个(我预计问题将以另一种方式显示给其他单元格)

所以我已经解决了我自己的问题,希望能够为其他任何人提供足够的信息.如果有人认为这应该有正式答案,请放心,我计划在一天或三天内接受最好看的一个.

Azn*_*nix 9

您可以使用此示例代码从NIB获取单元格高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    return [[[[NSBundle mainBundle] loadNibNamed:@"ELConvCurListViewCell" owner:self options:nil] objectAtIndex:0] bounds].size.height;
}
Run Code Online (Sandbox Code Playgroud)

更新:您可以viewDidLoadcellHeight变量和heightForRowAtIndexPath使用中获取并分配NIB的高度一次return cellHeight

  • 这只是一个例子.您可以在`viewDidLoad`中为`cellHeight`变量获取并指定NIB的高度,在`heightForRowAtIndexPath`中使用`return cellHeight` (4认同)
  • 这实在是效率低下.你不应该这样做.它会杀死你的表滚动性能. (3认同)

Mru*_*nal 3

第一个被调用的 UITableViewDelegate 方法是 heightForRowAtIndexPath,而不是 UITableViewDataSource 方法 cellForRowAtIndexPath。

您只能在 cellForRowAtIndexPath 中获取自定义单元格高度,您可以在其中分配初始化该单元格。因此,这里不会考虑自定义单元格高度。

它将采用仅在 heightForRowAtIndexPath 方法中提到的单元格的高度。因为它首先被调用。