[ios] 如何在UITableview的tableview cell裡動態計算文字高度, 使用storyboard

首先我們在storyboard的cell裡面的UILabel, 設定好上下左右貼邊的auto layout.

再來到 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
裡面

針對這個cell計算裡面label的高度, 然後再重新layout

        UITableviewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"xxx" forIndexPath:indexPath];

        dispatch_async(dispatch_get_main_queue(), ^{
            CGRect bounds = cell.label.bounds;
            CGSize maxSize = CGSizeMake(bounds.size.width, CGFLOAT_MAX);
            CGSize newSize = [cell.labelAbout sizeThatFits:maxSize];
            newSize.width = MAX(bounds.size.width, newSize.width);
            bounds.size = newSize;
            cell.label.bounds = bounds;
            
            // ask tableview to fit the height
            [self.tableView beginUpdates];
            [self.tableView endUpdates];
            
            [cell.contentView layoutIfNeeded];
        });

        return cell;

   

留言

  1. iOS8之後, 如 cell 為 autoLayout 直接設定tableview屬性更方便
    tableView.rowHeight = UITableViewAutomaticDimension;
    // 設定default
    tableView.estimatedRowHeight = 70.0;

    回覆刪除

張貼留言