我有一个在NIB中定义的UITableViewCell(实际上是一个子类).在NIB中我将帧高设置为183,我还将"行高"设置为183并勾选自定义.
在我原来的问题中,这里的一切都出了问题.看起来我的背高度错了,细胞装在错误的高度,然后调整到合适的高度,造成一个令人讨厌的视觉故障.
实际上我做了一些愚蠢的事情(并且总是返回错误的高度),而且我已经太晚了才能弄明白,所以我向SO寻求帮助然后去睡觉.睡觉(+咖啡)让一切都清晰.
因此,对于记录,如果从NIB加载自定义UITableViewCell,您可以查看frame.size.height并返回正确的数字.
如果从中返回错误的数字,则tableView:heightForRowAtIndexPath:可能会出现此故障,至少如果错误的单元格是表格中的最后一个(我预计问题将以另一种方式显示给其他单元格)
所以我已经解决了我自己的问题,希望能够为其他任何人提供足够的信息.如果有人认为这应该有正式答案,请放心,我计划在一天或三天内接受最好看的一个.
您可以使用此示例代码从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)
更新:您可以viewDidLoad在cellHeight变量和heightForRowAtIndexPath使用中获取并分配NIB的高度一次return cellHeight
第一个被调用的 UITableViewDelegate 方法是 heightForRowAtIndexPath,而不是 UITableViewDataSource 方法 cellForRowAtIndexPath。
您只能在 cellForRowAtIndexPath 中获取自定义单元格高度,您可以在其中分配初始化该单元格。因此,这里不会考虑自定义单元格高度。
它将采用仅在 heightForRowAtIndexPath 方法中提到的单元格的高度。因为它首先被调用。