在表视图中使用autolayout的水平集合视图

时间:2017-07-22 08:11:43

标签: ios swift uitableview uicollectionview uikit

我正在拼命尝试使用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
}

我认为我需要告诉集合视图在我的代码中的任何位置进行布局,并且还要给它足够的空间,但是我的尝试在运行时结束了大量的自动布局错误。所以也许有人可以帮我解决这个问题,我真的不想硬编码。

提前谢谢你,

安德烈亚斯

1 个答案:

答案 0 :(得分:0)

您可以使用" UICollectionViewDelegateFlowLayout ",它告诉集合视图每个单元格的大小,然后为单元格的子视图项目添加自动布局约束。

将您的集合视图应用于UICollectionViewDelegateFlowLayout,然后进行设置 集合视图的dataSource和委托

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 100, height: frame.height)
    }