在heightForRowAtIndexPath之后尝试在cellForRowAtIndexPath中设置单元格的高度

Luk*_*uke 1 objective-c uitableview ios heightforrowatindexpath

因为heightForRowAtIndexPath以前叫过cellForRowAtIndexPath,我假设如果我想从内部修改高度cellForRowAtIndexPath,我可以这样做.看来我做不到.我已经测试了通过NSLog,如果我改变了cell.frame.size.height,那么改变就会存储在那里,但是单元本身不会采用新的大小(它是使用我设置的那个heightForRowAtIndexPath).

是否有另一种方法可以调整在某个时刻之后调用的单元格高度cellForRowAtIndexPath?如果没有,还有另一种方法吗?我需要使用,cellForRowAtIndexPath因为我在飞行中决定是否依次将图像随机添加到每个单元格.

Tom*_*ift 6

UITableViewDelegate heightForRowAtIndexPath并且UITableView rowHeight是指定单元格高度的唯一机制.tableview本身正在调整基于这些的单元格大小; 你不能自己设置你的细胞框架,并期望它的工作.

您可以做的最好的事情是能够在创建单元格之前提前计算单元格高度.我经常会定义一个+ (CGFloat) cellHeightWithDatum: (id) datum forWidth: (CGFloat) tableWidth方法来调用我的单元类heightForRowAtIndexPath.这里的基准是驱动单元内容的模型.然后,该方法查看模型并计算出细胞需要的高度.

如果您在创建单元格后绝对需要更改单元格的高度,则可以通过要求tableview重新加载单元格来执行此操作,或者在不调用reloadData的情况下刷新整个表格.这个技巧是通过:

[tableView beginUpdates];
[tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)

要重新加载单个单元格: UITableView reloadRowsAtIndexPaths:withRowAnimation: