不使用 AutoLayout 的 UITableView 动态行高

Posted

技术标签:

【中文标题】不使用 AutoLayout 的 UITableView 动态行高【英文标题】:UITableView Dynamic Row Height Without Using AutoLayout 【发布时间】:2015-12-08 08:10:06 【问题描述】:

我支持 ios 7,但我没有使用自动布局。有没有办法让单元格标签以这种方式动态高度?

谢谢

编辑:

这是我在 iOS 7 中用于定义动态高度的代码,似乎我可以让它与自动布局一起工作,但它切断了底部的最后一个单元格,这很奇怪。

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
    var cell = offScreenCells.objectForKey("gcc") as? GalleryCommentCell
    if cell == nil 
        cell = commentsTable.dequeueReusableCellWithIdentifier("GalleryCommentCustomCell") as? GalleryCommentCell
        offScreenCells.setObject(cell!, forKey: "gcc")
    

    let comment :GalleryCommentInfo = commentResults[indexPath.row]

    setCellCommentInfo(cell!, data: comment)

    cell!.bounds = CGRectMake(0, 0, CGRectGetWidth(commentsTable.bounds), CGRectGetHeight(cell!.bounds))

    cell!.setNeedsLayout()
    cell!.layoutIfNeeded()

    let height = cell!.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
    return height + 1


func setCellCommentInfo(cell :GalleryCommentCell, data :GalleryCommentInfo)  
    cell.commentDate.text = data.galleryCommentDate

    cell.comment.text = data.galleryComment

【问题讨论】:

首先阅读UITableViewDelegate的文档。 我尝试了多种解决方案,但没有任何效果。最后一个单元格似乎被切断了,只是它的底部。我可以发布代码,我什至尝试过使用自动布局。 用您的尝试更新您的问题并解释您遇到的问题。 似乎将 contentInset 添加到我的表格底部解决了中断问题,但不确定这是否是最有效的方法。 【参考方案1】:

在您的自定义单元格中实现如下方法:

+ (CGFloat)heightForContactName:(NSString *)name

    CGFloat height = 0.0f;
    if (name) 
        CGFloat heightForText;
        // Calculate text height with `textBoundingRect`...
        height += heightForText; 
    
    return height;

【讨论】:

以上是关于不使用 AutoLayout 的 UITableView 动态行高的主要内容,如果未能解决你的问题,请参考以下文章

不使用 AutoLayout 的 UITableView 动态行高

使用 AutoLayout 将 UIView 隐藏在单元格内时,不适合 UITableViewCell 高度

AutoLayout - 不旋转的 UIImageView

UIScrollView 被裁剪并且不使用 Autolayout 滚动

UICollectionViewCell:AutoLayout - 尺寸计算不正确(偏移 10 pt)

使用 AutoLayout 时子视图 Rect 不等于视图 Rect