iOS UITableViewCell中intrinsicCon
2022-12-09 本文已影响0人
迷路的小小
- SnowTagsView
- 通常情况下使用intrinsicContentSize的cell无法自动刷新高度
class TableViewCell: UITableViewCell {
let tagsView = SnowTagsView()
override func prepareForReuse() {
super.prepareForReuse()
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupUI()
}
func setupUI() {
contentView.addSubview(tagsView)
tagsView.translatesAutoresizingMaskIntoConstraints = false
contentView.addConstraints([
tagsView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 20),
tagsView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 20),
tagsView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -20),
tagsView.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -20)
])
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
此时,显示是单行,高度并没有刷新。
-
contentSize
想要解决这个问题,首先要从UITableView
的contentSize
入手。
-
固定高度
如果UITableView
中的Cell
采用的是固定高度,那么contentSize
的高度很明显就是fixedHeight × cellCount
。 -
自动高度
当采用了自动高度的话,那么系统会调用 Cell 上的systemLayoutSizeFitting(_:, withHorizontalFittingPriority:, verticalFittingPriority:)
的方法,这个方法会根据你为 Cell 设置的约束计算出 Cell 的尺寸。
- 解决之道
由此可以在tableView
计算contentSize
的时候刷新cell
布局
override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize {
tagsView.layoutIfNeeded()
return super.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: horizontalFittingPriority, verticalFittingPriority: verticalFittingPriority)
}