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

我有一个在NIB中定义的UITableViewCell(真的是一个子类)。 在NIB中,我将框架高度设置为183,我也将“Row Height”设置为183,并勾选了自定义。

在我原来的问题中,所有的东西都出错了 这看起来像是我错了一个高度,细胞装在错误的高度,然后调整到正确的高度,造成一个令人讨厌的视觉故障。

实际上我是在做一些愚蠢的事情(总是回到错误的高度),晚上为时已经太晚了,我找不到了,所以我就请求帮忙,然后去睡觉。 睡眠(+咖啡)使一切都清楚。

因此,为了logging,如果您从NIB加载自定义UITableViewCell,则可以查看frame.size.height并返回正确的编号。

如果你从tableView:heightForRowAtIndexPath:返回错误的数字tableView:heightForRowAtIndexPath:至less如果错误的单元格是表格中的最后一个单元格,你可以得到这个小故障(我希望这个问题会以另一种方式显示给其他单元格)

所以我已经解决了我自己的问题,并希望留下足够的信息给其他任何人打这个。 如果有人认为这应该有一个正式的答案放心我打算接受最好看的一天或3。

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

您只能在cellForRowAtIndexPath中获得您的自定义单元格高度,其中您alloc-init该单元格。 所以,这里不会考虑自定义单元格高度。

它只需要在heightForRowAtIndexPath方法中提到的单元格的高度。 因为它首先被调用。

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

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

更新:您可以获取并分配高度的NIB一次在viewDidLoadcellHeightvariables和在heightForRowAtIndexPath使用return cellHeight