TL;博士 如何在细胞膨胀导致细胞高度变化后更正我的tableView的高度 - 不使用延迟?
我的tableViewslls,展开和折叠。因此,我需要传递(使用委托方法)tableView的高度到它的superView。它的superview是一个collectionviewcell。
extension ArtistDetailViewController: UITableViewDelegate{
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let cell = tableView.cellForRow(at: indexPath) as? WorkTableViewCell else {
fatalError()
}
//1: create model
var work = works[indexPath.row]
//2: update the model
work.isExpanded = !work.isExpanded
//3: upadte dataSource
works[indexPath.row] = work
//4: update the text of textView
cell.moreInfoTextView.text = work.isExpanded ? work.info : WorkTableViewCell.textViewText
cell.moreInfoTextView.textAlignment = work.isExpanded ? .left : .center
//5: update TableView
tableView.beginUpdates()
tableView.endUpdates()
tableView.scrollToRow(at: indexPath, at: .top, animated: true)
//6: slavishly update cell with everything you got!
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
cell.contentView.setNeedsUpdateConstraints()
cell.contentView.updateConstraintsIfNeeded()
cell.contentView.setNeedsLayout()
cell.contentView.layoutIfNeeded()
print(tableView.contentSize.height) // prints 252
//7: pass tableView height with delay
DispatchQueue.main.asyncAfter(deadline: .now() + 0.01, execute: {
print(tableView.contentSize.height) // prints 341
self.tableViewHeight = tableView.contentSize.height
self.delegate?.didRender(with: self.tableViewHeight)
})
}
}
我的ArtistDetailViewController
有一个tableView属性。
tableView属性subclassed from a tableView which has intrinsicSize。
class AutomaticHeightTableView: UITableView {
override var intrinsicContentSize: CGSize {
return contentSize
}
override func reloadData() {
super.reloadData()
invalidateIntrinsicContentSize()
}
}
我遇到的问题是,如果我不使用任何延迟(步骤7):