【发布时间】:2021-02-10 23:47:56
【问题描述】:
我正在尝试构建一些东西
我正在尝试使用 UICollectionView 构建标签列表视图并将其嵌套到我的自定义 UITableViewCell 中。
我现在有什么
上网一搜,找到了问题的关键:
- 子类 UICollectionView 并实现它的内在内容大小属性。
但是,当我将自定义 UICollectionView 嵌套到自调整大小的 UITableViewCell 中时,整个事情就无法正常工作。布局已损坏。
无论我如何更改代码,我都会得到以下 3 个有问题的 UI 之一。
collection view 的高度总是不对的,要么太小,要么太大,不能恰到好处地拥抱它的内容。
当我使用Debug View Hierarchy查看视图时,我发现虽然UI坏了,但集合视图的contentSize属性值是正确的。好像内容大小属性不能及时反映到UI上。
class IntrinsicCollectionView: UICollectionView {
override var contentSize: CGSize {
didSet {
invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
layoutIfNeeded()
return CGSize(width: UIView.noIntrinsicMetric, height: collectionViewLayout.collectionViewContentSize.height)
}
override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
super.init(frame: frame, collectionViewLayout: layout)
isScrollEnabled = false
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
关于如何创建具有内在内容大小的自定义 UICollectionView 有很多解决方案。其中一些可以正常工作。但是当将它们嵌套到 UITableViewCell 中时,它们都不能正常工作。
还有一些关于只将一个 UICollectionView 嵌套到 UITableViewCell 中而没有其他视图的答案。但是如果UITableViewCell中还有一些UILabel,那就不行了。
我将所有代码上传到 github。 https://github.com/yunhao/nest-collectionview-in-tableviewcell
谢谢!
【问题讨论】:
标签: ios uicollectionview autolayout