在已经出现之后更改动态高度UITableViewCell的高度

时间:2016-02-01 23:45:58

标签: ios swift uitableview

我跟着this tutorial创建了一个动态高度UITableViewCell。

我的原型单元有1个标签(非常简单)。该标签的约束设置为" 0"对于细胞边缘的所有侧面。那个标签有numberOfLines = 0并包裹着这个词。

在我的UITableView设置中,我这样做:

    self.tableView.rowHeight = UITableViewAutomaticDimension
    self.tableView.estimatedRowHeight = 100.0 //some random number 

基本上,一切正常。每个细胞都有自己不同的高度。

当我用不同的文本更新标签时出现问题。单元格的高度保持不变,文本只会被截断或出现空白区域。

有没有办法告诉单元格"重绘"本身,以便再次计算高度?

理想情况下,我想在UITableViewCell类中执行 ,因为它会收到更新标签文本的通知。

1 个答案:

答案 0 :(得分:1)

您必须实施estimatedHeightForRowAtIndexPath并计算标签的大小。

例如:

override func tableView(tableView: UITableView,
                        estimatedHeightForRowAtIndexPath 
                        indexPath: NSIndexPath) -> CGFloat {
   let model = YourModelArray[indexPath.row]
   // Label fontName and size
   let attributes = [
            NSFontAttributeName : UIFont(name: "FontName-Regular", size: 16) as! AnyObject]
    let nsStringText = model.text as! NSString
    // Calculate the size here 
    //--------------------//
    //--10--UILabel--10--//
    //-----Element------//
    //------------------//
    let size = nsStringText.
                  boundingRectWithSize(CGSize(width: self.tableView.frame.width - 20,
                  height: 1000), 
                  options:[NSStringDrawingOptions.UsesLineFragmentOrigin,
                           NSStringDrawingOptions.UsesFontLeading],
                           attributes: attributes, context: nil)
    // Basically add other elements heights and vertical Spacing between them
    return size.height + element.frame.height + verticalSpacingBetweenLabelAndElement
}