设置单元格的高度等于标签内容

Posted

技术标签:

【中文标题】设置单元格的高度等于标签内容【英文标题】:Set height of cell equal to the label content 【发布时间】:2016-03-20 14:38:41 【问题描述】:

我有一个带有多个 customCells 的 tableView,因此我不能使用 estimatedRowHeight。但是在这个单元格中,我需要将行高设置为单元格内标签的内容。但是它似乎没有显示所有的文本。

我从设置 cosntraints 开始

然后在单元格子类中我设置字体高度

descLabel!.font = UIFont.systemFontOfSize(14)

然后我创建计算函数

func calculateHeightForString(inString:String) -> CGFloat

    let messageString = inString
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineSpacing = 2
    let attributes = [NSFontAttributeName: UIFont.systemFontOfSize(14.0)]

    let attrString:NSMutableAttributedString? = NSMutableAttributedString(string: messageString, attributes: attributes)
    attrString!.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attrString!.length))
    let rect:CGRect = attrString!.boundingRectWithSize(CGSizeMake(self.view.frame.width-24,CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, context:nil )//hear u will get nearer height not the exact value
    let requredSize:CGRect = rect


    return requredSize.height  //to include button's in your tableview


设置第 1 部分的高度

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

    if indexPath.section == 0 

        return 160.0/320.0 * tableView.bounds.width
     else if indexPath.section == 1 
        return self.calculateHeightForString("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also th") + 24
     else 
        return 100
    

没有显示所有内容的结果

【问题讨论】:

检查 1 衬里的单元格高度是多少。如果与上面相同,则约束似乎不正确。 【参考方案1】:

如果您已正确设置约束并且应用的部署目标是 >= ios 8,则可以使用自动行高计算。因此您必须在viewDidLoad 中执行以下操作:

tableView.estimatedRowHeight = 44
tableView.rowHeight = UITableViewAutomaticDimension

44 应该是某种平均行高。那么您根本不必实现方法estimatedRowHeightheightForRow...

您还可以实现heightForRow 并执行以下操作:

// if cell is of kind textview cell
return UITableViewAutomaticDimension
// else
return some static value

【讨论】:

好吧,正如我提到的,它在我的情况下似乎不起作用,因为我有多个单元子类,其中休息是静态高度 在这种情况下,您可以实现 heightForRow 并为 textviewcell... 类型的单元格返回自动尺寸【参考方案2】:

从您的字符串看来,最后一行丢失了。这可能是由于底部的负面约束(在附图中显示 -4)。尝试将其更改为积极的东西。

【讨论】:

以上是关于设置单元格的高度等于标签内容的主要内容,如果未能解决你的问题,请参考以下文章

根据内容动态调整tableview单元格的高度 - iOS Swift

设置表格视图单元格的高度以匹配底部到标签栏顶部

在不配置的情况下增加单元格的高度?

在tableview ios中使用UILabel的单元格的动态高度

将动态单元格的表视图内容高度设置为表视图高度约束 ios

设置表格视图单元格的动态高度