如何在自定义 tableView Cell 中调整标签高度和宽度

Posted

技术标签:

【中文标题】如何在自定义 tableView Cell 中调整标签高度和宽度【英文标题】:How to adjust label height and width in custom tableView Cell 【发布时间】:2016-10-07 07:27:14 【问题描述】:

我有一个可展开的 tableView,当我展开一个部分时,其中有三个单元格。在第 5 个单元格中只有名称,在第 2 个单元格中。它的内容很大。现在我想根据内容自动调整这个标签的高度和宽度。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
        let cell = tblView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomTableViewCell

        let dataArrayTblView = dataArrayForTableView
        let titleName = dataArrayTblView.valueForKey("name")
        let dueDate = dataArrayTblView.valueForKey("deadlinedate")
        let description = dataArrayTblView.valueForKey("description")

        cell.titleLabel.text = titleName[indexPath.row] as AnyObject! as! String!
        cell.dueDateLabel.text = dueDate[indexPath.row] as? String
        cell.descriptionLabel.text = description[indexPath.row] as? String

        cell.descriptionLabel.sizeToFit()


        cell.textLabel?.backgroundColor = UIColor.clearColor()
        cell.selectionStyle = .None
        return cell
    

但没有获得完整的内容

【问题讨论】:

我没有得到完整的描述。 ***.com/questions/39888512/… 我没有使用 AutoLayout。 试试这个 cell.descriptionLabel.adjustsFontSizeToFitWidth = true 【参考方案1】:

尝试设置它。它会自动为您调整行的高度。如果它不起作用,那么您的情节提要中的约束有问题。

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat 
    return 40


override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    return UITableViewAutomaticDimension

【讨论】:

使用此功能后,我的截止日期和描述单元格丢失了 你有多少行?根据您的回答,我猜您在表格视图方面做错了。 我只有三行 第一行和第二行只有一个行标签 但是对于第三行我有一个标签。我想根据内容自动调整它,我从 API 获得的内容【参考方案2】:

您应该使用UITableViewAutomaticDimension 作为行高,

  // this should be set in viewDidload
  tableView.rowHeight = UITableViewAutomaticDimension
  tableView.estimatedRowHeight = 140

为此,您必须使用autolayout 并应为单元格中的标签设置正确的constraints

约束应该在线性链中,我的意思是你的标签的顶部和底部都必须设置约束,你的标签应该根据内容调整大小,这样你的单元格就会相应地调整大小!

您可以参考Self-sizing Table View Cells by Raywenderlich!

【讨论】:

使用后,它只显示Title,DueDate和Description不显示【参考方案3】:

把下面的viewDidLoad和设置autolayout按照下面的截图。

  tblview.rowHeight = UITableViewAutomaticDimension
  tblview.estimatedRowHeight = 44

Screenshot 1

Screenshot 2

Screenshot 3

Screenshot 4

【讨论】:

不幸的是我没有使用 AutoLayout。有第二选择吗?【参考方案4】:

使用heightForRowAtIndexPath 方法调整行高。计算 使用boundingRectWithSize这个方法的字符串大小。示例:

试试这个:

if let YOUR_STRING:NSString = str as NSString? 
let sizeOfString = ns_str.boundingRectWithSize(
                                 CGSizeMake(self.titleLabel.frame.size.width, CGFloat.infinity),options: NSStringDrawingOptions.UsesLineFragmentOrigin,   attributes: [NSFontAttributeName: lbl.font], context: nil).size

【讨论】:

要返回什么值? 这个方法将返回 CGRect 而你只返回 sizeOfString.height 因为最后我得到的是带有 .size 的 CGSize 值

以上是关于如何在自定义 tableView Cell 中调整标签高度和宽度的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发学习-如何优化tableview的使用

如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图

如何优化tableView的使用?

iOS tableViewCell 在自定义高度方法中遇到的问题,cell高度为0,cell显示不出来,cell直接显示第几个而不是...cell显示个数不对

cell.contentView systemLayoutSizeFittingSize:不适用于动态高度tableview

如何调整自定义tableview单元格下的UIImageview