使用 tableViewCell 高度调整 UILabel 的高度

Posted

技术标签:

【中文标题】使用 tableViewCell 高度调整 UILabel 的高度【英文标题】:Resizing the height of UILabel with the height of tableViewCell height 【发布时间】:2013-10-03 12:20:31 【问题描述】:

我是 ios 开发的新手。我正在使用动态高度的 tableView。 tableViewCell 的高度在点击时增加或减少我正在使用此代码...

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

    if ([self.selectedPath isEqual:indexPath])
    
        return 250;
    
    else
    
        return 44;
    



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

onSelectCount++;

    self.selectedPath = indexPath;
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation: UITableViewRowAnimationLeft];
    self.selectedRowIndex = [NSNumber numberWithInteger:indexPath.row];
    [self.tableView1 deselectRowAtIndexPath:indexPath animated:YES];

    //First we check if a cell is already expanded.
    //If it is we want to minimize make sure it is reloaded to minimize it back
    if( onSelectCount==1 )
    
        NSLog(@"num=%d",onSelectCount);
        NSLog(@"First Condition");
        [tableView beginUpdates];
        NSIndexPath *previousPath = [NSIndexPath indexPathForRow:self.selectedRowIndex.integerValue inSection:0];
        self.selectedRowIndex = [NSNumber numberWithInteger:indexPath.row];
        self.selectedPath=indexPath;
        [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:previousPath] withRowAnimation:UITableViewRowAnimationFade];
        [tableView endUpdates];
    

    if(self.selectedPath.row!=indexPath.row)
    
        [tableView beginUpdates];
        [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:selectedPath] withRowAnimation:UITableViewRowAnimationFade];
        [tableView endUpdates];

        selectedPath=indexPath;
        onSelectCount=0;
        [self tableView:tableView didSelectRowAtIndexPath:selectedPath];
    

    if(self.selectedRowIndex.integerValue == indexPath.row && onSelectCount==2)
    
        [tableView beginUpdates];
        self.selectedRowIndex = [NSNumber numberWithInteger:-1];
        [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        onSelectCount=0;
        [tableView endUpdates];

        

现在我想添加一些标签以在 tableViewCell 上显示一些信息,但是当我单击单元格时,它会完美调整大小,但单元格上的标签不会调整大小。请告诉我如何使用单元格高度调整 UILabel 的大小。任何帮助将不胜感激...

【问题讨论】:

【参考方案1】:

使用方法- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 来实现这一点。将用于更改单元格高度的整个逻辑从 didSelectRow 移动到 cellForRowAtIndexPath 也很好。

回答你的问题:

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

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    CGRect sizeRect = cell.textLabel.frame;
    sizeRect.size.height = cell.contentView.frame.size.height;
    cell.textLabel.frame = sizeRect;

    return cell;

其中 textLabel 是标签的名称。 基本思想是你取标签的框架,然后将它的高度设置为单元格视图的高度,然后将新的大小设置为标签。

【讨论】:

以上是关于使用 tableViewCell 高度调整 UILabel 的高度的主要内容,如果未能解决你的问题,请参考以下文章

自动调整 TableViewCell 的高度以适应 iOS 6 中的 UIImageVIew

使用 Autolayout 自定义具有动态高度和全宽图像的 TableViewCell

TableView单元格内的TableView,自动调整单元格高度

tableViewCell 的 ContentView 不能正确自动调整大小?

转使用Autolayout xib实现动态高度的TableViewCell

让自定义 TableViewCell 的 UIimageView 宽度为单元格宽度的 1/3,单元格高度 = 图像纵横比