基于UIlabel行计数扩展tableviewcell

时间:2015-12-14 17:32:51

标签: ios swift uitableview

我有一个自定义UITableViewCellUILabel有多行。我试图实现一个分接展开/收缩功能,这样当标签只有一行时,点击单元格时不会发生扩展,但如果标签是多行,则单元格能够扩展/收缩窃听。我得到了扩展和合同工作,但我无法根据UILabel中的行数找出如何使其工作。

这是我目前正在为细胞扩展做的事情,但它根本不是基于UILabel

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    if (indexPath.row == self.selectedRow?.row && self.expand == true)
    {
        self.previousRow = self.selectedRow?.row
        return 200 
    }
    else if(self.previousRow == self.selectedRow?.row && self.expand == false){
        return 65
    }      
    return 65
}  

2 个答案:

答案 0 :(得分:5)

您可以将表格视图动态单元格大小调整与autolayout结合使用,并结合UILabel的numberOfLines属性来扩展和压缩单元格。

解决方案的核心是:

tableView.beginUpdates()
label.numberOfLines = label.numberOfLines == 0 ? 1 : 0
tableView.endUpdates()

这实质上是触发表格上的动画,并将行数从0(任意行数)切换为1行。 Autolayout正在做其余的事情。

我认为这比手动更新高度指标要好。完整的示例项目可以在我的github上找到:https://github.com/rayfix/MultilineDemo

demonstration

答案 1 :(得分:0)

您可能需要自己测量文字,因为标签在您展开之前不会有更多行。

像这样的东西(100000只需要一个大数字)

CGSize textSize = [self.label.text sizeWithFont:self.label.font constrainedToSize:CGSizeMake(self.label.bounds.width, 100000) lineBreakMode: UILineBreakModeWordWrap];