将UITableViewCell的高度调整为UITextView的高度

时间:2018-01-05 10:31:38

标签: ios swift uitableview

我的UITableView中有两个单元格。一个是自定义UITableViewCell,另一个是内部带有UITextView的单元格,称为TextViewCell类型。

因为它们是静态的,所以单元格从xib:

加载到viewDidLoad方法中
textCell = Bundle.main.loadNibNamed(String(describing: TextViewCell.self),
                                        owner: self, options: nil)?.first! as! TextViewCell
ratingCell = Bundle.main.loadNibNamed(String(describing: RatingCell.self),
                                          owner: self, options: nil)?.first! as! RatingCell

现在我尝试使用heightForRowAt委托更改高度:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 1 {
        return textCell.textView.contentSize.height
    }
    return ratingCell.ratingView.frame.height
}

我在UITextView上禁用了滚动,但单元格没有正确调整大小。事实上,细胞变小了。 TextViewCell的约束如下所示: enter image description here

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

我认为你需要使用自我调整UITableViewCell。将heightForRowAt的当前实现替换为以下内容:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    return UITableViewAutomaticDimension
}

现在,UITableView对象中的单元格高度将根据约束自动计算。 另外,为行高添加一些估计值:

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {

    return 100.0 // You can set any other value, it's up to you
}

现在您将看到UITextView视图填充整个UITableViewCell单元格。

答案 1 :(得分:3)

您应该在heightForRowAt中获取UITextView的高度,并将此高度作为单元格高度返回。见下面的例子

        let lblDescLong = UITextView()
        lblDescLong.textAlignment = .left
        lblDescLong.text = “your text for text view”
        lblDescLong.font = YourFont(size: 12)
        let newSize = lblDescLong.sizeThatFits(CGSize(width: widthForTextView, height: CGFloat.greatestFiniteMagnitude))
        return newSize.height