我的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
的约束如下所示:
有什么建议吗?
答案 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