UITableViewCell 神秘地改变高度

Posted

技术标签:

【中文标题】UITableViewCell 神秘地改变高度【英文标题】:UITableViewCell mysteriously changing heights 【发布时间】:2012-09-03 11:14:29 【问题描述】:

我有一个带有UITableView(样式:分组)的xib,还有一些UITableViewCells也在作为出口集合连接的xib上。

我以与Table View Programming Guide (The Technique for Static Row Content) 中描述的方式非常相似的方式从tableView:cellForRowAtIndexPath: 返回这些单元格。

然后我有另一个 IBOutlet 单元格,具有不同的高度,以及一个用于切换标志并始终重新加载同一行的按钮 (reloadRowsAtIndexPaths:withRowAnimation:)。

cellForRowAtIndexPath 对于该确切行返回来自出口集合的正常单元格之一或该特殊单元格(取决于标志)。

heightForRowAtIndexPath 还获取相应单元格的高度并使用相同的“逻辑”返回它,我已经将其 NSLogged 至死;

现在发生的情况是,每次我按下按钮时,第一行和最后一行的高度都会增加一个像素!任何人都可以想到发生了什么?

我上传了一个示例项目:http://www.mediafire.com/?sc22v0c6w11b4l6

【问题讨论】:

【参考方案1】:

替换:

return (UIView *)[self.cells objectAtIndex:indexPath.row] bounds].size.height;

return 30;

解决您的问题。

我认为您的较大单元格的重绘会修改整个表格的大小,并且由于某种原因将第一个和最后一个单元格重新计算为更大的大小。

【讨论】:

是的,谢谢,我刚刚发现了同样的事情。然而,这只是一个实际项目的一个小测试用例,其中包含许多具有自定义高度的单元格。如果这是解决方案(可能是暗示错误报告是有序的,也许?),我想我必须将每个初始高度存储在某个地方并重用它们,或者至少询问返回的情况高度是第一行或最后一行... 你为什么不那样使用故事板和自定义单元格? 无法使用故事板,客户要求 ios 4.x 兼容性:/ 是否允许在 XIB 定义中为其他行设置固定大小? 我做了一些测试,显然,reloadRowsAtIndexPaths 导致表重新计算某些行的高度。【参考方案2】:

只有当你的 tableViewStyle 被分组时才会出现这个问题......所以你可以使用普通样式或返回硬编码值

if (indexPath.row == kBigCellRowNum && self.showTheBigCell)

    return self.bigCell.frame.size.height;



else

    return 44;


【讨论】:

以上是关于UITableViewCell 神秘地改变高度的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 改变高度

改变 UITableViewCell 高度的自定义动画

动态改变 UITableViewCell 高度 - Swift 4

UITableViewCell 高度

动画 UITableViewCell 高度

更改 UITableViewCell 内的 UIView 高度