根据标题内的集合视图动态内容显示集合视图的标题大小不起作用
Posted
技术标签:
【中文标题】根据标题内的集合视图动态内容显示集合视图的标题大小不起作用【英文标题】:Display header size of collectionView based on a collection view dynamic content inside of that header not working 【发布时间】:2018-10-07 21:50:20 【问题描述】:我有一个collectionView(1),我在上面设置了一个标题。此标头在另一个 collectionView(2) 中。现在我正在尝试根据标题中 collectionView(2) 的大小在 referenceSizeForHeaderInSection 中设置 headerSize。我基本上被卡住了,不知道从哪里开始,我尝试了一切。我能够通过以下方式获得标题高度:
collectionView.collectionViewLayout.collectionViewContentSize.height
但只能在 collectionView(2) 中设置公共变量。尝试获取公共 var 它将在 collectionView(1) referenceSizeForHeaderInSection 中不起作用(仅当我使用无法获取标头返回值的 DispatchQueue 时)。可能我做错了什么。需要帮助,另一个方向,任何它的赞赏。
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "VideoHeader", for: indexPath)
header.removeFromSuperview()
header.backgroundColor = UIColor.white
headerAdvertCollection.collectionView.translatesAutoresizingMaskIntoConstraints = false
header.addSubview(headerAdvertCollection.collectionView)
headerAdvertCollection.collectionView.centerXAnchor.constraint(equalTo: header.centerXAnchor).isActive = true
headerAdvertCollection.collectionView.centerYAnchor.constraint(equalTo: header.centerYAnchor).isActive = true
headerAdvertCollection.collectionView.heightAnchor.constraint(equalTo: header.heightAnchor).isActive = true
headerAdvertCollection.collectionView.widthAnchor.constraint(equalTo: header.widthAnchor, constant: -10).isActive = true
headerAdvertCollection.setupCollectionView()
return header
//MARK: Collection View Header Height
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize
let advertisingView : CGFloat = 450
let height : CGFloat = advertisingView
return CGSize(width: collectionView.frame.width - 10, height: height)
【问题讨论】:
【参考方案1】:假设您有 collectionView1 和 collectionView2,您可以在委托/数据源方法中访问其中一个,只需执行 if 检查即可。
例如在referenceSizeForHeaderInSection中:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize
if collectionView == collectionView1
let advertisingView : CGFloat = 450
let height : CGFloat = advertisingView
//supposing you want to use collectionView2
return CGSize(width: collectionView2.frame.width - 10, height: height)
else
// HERE YOU CAN RETURN A VALUE FOR collectionView2
注意:要使用collectionView1和collectionView2,你需要链接outlets
【讨论】:
你好安德鲁。问题是,如果您尝试从 collectionView2 中获取一个值,该值位于 collectionView1 的标头中,该值将为 0。collectionView1 的标头正在加载 collectionView2,这意味着它在我找到高度之前就已加载,所以我不会无法设置。 然后您可以将值保存到类变量中,然后使用该值重新加载集合视图 2 我仍然会对用户看到的第一件事有疑问。在这种情况下,标头不成比例或值为 0 时根本没有标头,直到再次重新加载:)。以上是关于根据标题内的集合视图动态内容显示集合视图的标题大小不起作用的主要内容,如果未能解决你的问题,请参考以下文章