我跟着this tutorial创建了一个动态高度UITableViewCell。
我的原型单元有1个标签(非常简单)。该标签的约束设置为" 0"对于细胞边缘的所有侧面。那个标签有numberOfLines = 0
并包裹着这个词。
在我的UITableView设置中,我这样做:
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 100.0 //some random number
基本上,一切正常。每个细胞都有自己不同的高度。
当我用不同的文本更新标签时出现问题。单元格的高度保持不变,文本只会被截断或出现空白区域。
有没有办法告诉单元格"重绘"本身,以便再次计算高度?
理想情况下,我想在UITableViewCell类中执行 ,因为它会收到更新标签文本的通知。
答案 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
}