我正在拼命尝试使用autolayout将水平滚动集合视图放入表格视图单元格,但是集合视图以及tableview单元格不会按预期布局,因此它们的高度最终为零。我已经查看了关于这个主题我在这里可以找到的每一篇文章,但没有一篇能帮我解决问题。
一般结构如下:
的TableView
表视图单元格
收藏视图
|集合查看单元格|集合查看单元格| ...
表视图单元格
收藏视图
|集合查看单元格|集合查看单元格| ...
我已经设置了TableView自动调整大小属性
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 100.0
以及集合视图流布局属性:
flowLayout.scrollDirection = .horizontal
flowLayout.estimatedItemSize = CGSize(width: 1.0, height: 1.0)
TableViewCell布局:
contentView.layout("H:|[a]|", views: collectionView)
contentView.layout("V:|[a]|", views: collectionView)
CollectionViewCell布局:
contentView.layout("H:|[a]|", views: imageView)
contentView.layout("H:|[a]|", views: titleLabel)
contentView.layout("H:|[a]|", views: subtitleLabel)
contentView.layout("V:|[a]-(4)-[b][c]|", views: imageView, titleLabel, subtitleLabel)
我已经尝试手动设置集合视图的高度,但其contentSize始终为零,可能是因为它没有可能呈现其单元格的空间。
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
collectionViewHeightConstraint.constant = collectionView.contentSize.height
}
我认为我需要告诉集合视图在我的代码中的任何位置进行布局,并且还要给它足够的空间,但是我的尝试在运行时结束了大量的自动布局错误。所以也许有人可以帮我解决这个问题,我真的不想硬编码。
提前谢谢你,
安德烈亚斯
答案 0 :(得分:0)
您可以使用" UICollectionViewDelegateFlowLayout ",它告诉集合视图每个单元格的大小,然后为单元格的子视图项目添加自动布局约束。
将您的集合视图应用于UICollectionViewDelegateFlowLayout,然后进行设置 集合视图的dataSource和委托
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 100, height: frame.height)
}