改变 UITableView Customcell 的高度

Posted

技术标签:

【中文标题】改变 UITableView Customcell 的高度【英文标题】:Change Height of UITableView Customcell 【发布时间】:2013-08-30 10:23:43 【问题描述】:

我已经用自定义单元格实现了 UITableView,

我想做的是,我想根据文字长度改变高度UITableViewCell,(动态高度)

这是我的代码 sn-p,

#define FONT_SIZE 14.0f
#define CELL_CONTENT_WIDTH 320.0f
#define CELL_CONTENT_MARGIN 10.0f


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

    NSString *text = [DescArr objectAtIndex:[indexPath row]];
    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
    CGFloat height = MAX(size.height, 55.0);

    return height;

UITableViewCell 的高度正常变化,但 CustomCell 的高度没有变化,

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

    static NSString *CellIdentifier = @"BTSTicketsCellIdentifier";
    CRIndCoupnCell *cell = (CRIndCoupnCell *)[tblDescriptn dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CRIndCoupnCell" owner:self options:nil];
        for (id oneObject in nib) if ([oneObject isKindOfClass:[CRIndCoupnCell class]])
            cell = (CRIndCoupnCell *)oneObject;
    

    NSLog(@"cell.frame.size.height=%f",cell.frame.size.height);

    cell.lblleft.text=[arr objectAtIndex:indexPath.row];
    cell.lblRight.text=[DescArr objectAtIndex:indexPath.row];

    return cell;

我的日志在所有行中显示cell.frame.size.height=100.0。 CustomCell 的高度没有变化。

: 我在哪里犯错?请帮忙。

提前致谢

【问题讨论】:

确保您使用的自定义单元格标识符正确 是的,数据正确,但单元格的高度不正确。 你可以在这个 CGF 中打印高度吗?浮动高度 = MAX(size.height, 55.0); 日志显示:55,90,55,55 chk 这个:i.imgur.com/niBfSQ7.png 和你的静态单元格高度 【参考方案1】:

您将字符串限制为单元格全宽的大小减去单元格边距的 2 倍,最大高度为 2000,但是由于您将字符串设置为带有绿色文本颜色的标签文本,因此您应该检查根据该标签的宽度和任意高度 2000 或您选择的任何大小来选择大小。

CGSize constraint = CGSizeMake(MYGREENLABEL_WIDTH, 2000);

【讨论】:

heightForRowAtIndexPath 中写了这个仍然无法正常工作static NSString *CellIdentifier = @"BTSTicketsCellIdentifier"; CRIndCoupnCell *cell = (CRIndCoupnCell *)[tblDescriptn dequeueReusableCellWithIdentifier:CellIdentifier]; NSString *text = [DescArr objectAtIndex:[indexPath row]]; CGSize constraint = CGSizeMake(cell.lblRight.frame.size.height, 2000.0f); CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; CGFloat height = MAX(size.height, 200.0f); return height; 不要将此代码放在heightForRowAtIndexPath 方法中。只需从笔尖检查您的lblRight 框架并将其宽度放在设置约束大小的位置,就是这样 在哪里设置lblRight 框架?用什么方法? 仅在cellForRowAtIndexPath: 方法中执行此操作。这是在给定索引路径上显示特定单元格视图的方法。

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

UITableView 无法从 CustomCell 重新加载数据

CustomCell 标签值更改时如何更新 UITableView?

在UITableView中滚动时,CustomCell图像会发生变化

customCell 中的 UITableView 隐藏一个按钮也隐藏其他单元格的下一个按钮

将图像动态分配给 CustomCell

在 CustomCell 中获取 UILabel