在为每个UITableViewCell设置高度后获得UITableViewCell的高度

我为每个UITableViewCell设置高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

我需要得到每个UITableViewCell的高度

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

因为我需要在不同的单元格中添加子视图。

我试图使用cell.framecell.boundscell.contentView.frame ,但高度并没有改变。

这可能为时已晚,但您可以使用委托方法:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { CGRect cellSize = cell.frame; } 

希望它可以帮助任何人,让我知道如果我错过了什么。 🙂

我解决了这个问题:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ // create object id myObj = [_arrayEvents objectAtIndex:indexPath.row]; // create static identifier static NSString * myIdentifier = @"Cell"; // create static UITableViewCell static UITableViewCell * cell; // create cell with object cell = [self buildCell:myIdentifier tableView:tableView obj: myObj]; return cell.contentView.frame.size.height; } 

他们是不同的东西。 在heightForRowAtIndexPath中:你告诉UITableView它应该使用多less垂直空间来显示相应的单元格,但是这不影响单元格的实际大小! 所以如果你想要他们匹配你必须手动设置尺寸。

如果您不想/需要调整单元格框架的大小,只需将高度存储在自定义单元格类的属性中即可。

怎么样的UITableView的方法, - (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath

得到这样的rect,

 CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath]; 

正如@ilMalvagioDottorProsci所说,由heightForRowAtIndexPath函数返回的值不会影响单元格的实际大小。

如果你想实现每行的高度是由单元格高度决定的,我有一个技巧。

 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { id aKey = [self buildCellCacheKey:indexPath]; UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]; if ([_cellCache objectForKey:aKey]==nil) { [_cellCache setObject:cell forKey:aKey]; } return cell.bounds.size.height; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // for flexible height of table view cell.in this way,the cell height won't be caculate twice. id aKey = [self buildCellCacheKey:indexPath]; UITableViewCell *cacheCell = [_cellCache objectForKey:aKey]; if (cacheCell) { [cacheCell retain]; [_cellCache removeObjectForKey:aKey]; LOGDebug(@"return cache cell [%d]",indexPath.row); return [cacheCell autorelease]; } // here is the code you can config your cell.. }