我在
中为每个UITableViewCell设置了高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
我需要在
中获取每个UITableViewCell的高度- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
因为我需要在不同的单元格中添加SubView。
我试图使用cell.frame
& cell.bounds
& cell.contentView.frame
,但高度没变。
答案 0 :(得分:7)
这可能为时已晚,但您可以使用委托方法:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
CGRect cellSize = cell.frame;
}
希望它可以帮助任何人,如果我错过了什么,请告诉我。 :)
答案 1 :(得分:2)
我这样解决了:
- (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;
}
答案 2 :(得分:1)
他们是不同的东西。在heightForRowAtIndexPath中:你告诉UITableView它用来显示相应单元格的垂直空间有多少,但这不会影响单元格的实际大小!因此,如果您希望它们匹配,则必须手动设置尺寸。
如果您不想/需要调整单元格框架的大小,则应将高度存储在自定义单元格类的属性中。
答案 3 :(得分:1)
UITableView
方法- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath
。
像这样获取矩形,
CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
答案 4 :(得分:-1)
正如@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..
}