在部署iOS 13合成布局时,我遇到了一个奇怪的问题。
我想隐藏集合视图标题并实现referenceSizeForHeaderInSection
方法,但是referenceSizeForHeaderInSection
不能在合成布局上使用
这是我的作品布局:
lazy var collectionViewLayout: UICollectionViewLayout = {
// item layout deploy
let cellItemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .fractionalHeight(0.2))
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.33),heightDimension: .fractionalHeight(1.0))
let cellItem = NSCollectionLayoutItem(layoutSize: cellItemSize)
let item = NSCollectionLayoutItem(layoutSize: itemSize)
cellItem.contentInsets = NSDirectionalEdgeInsets(top: 4,leading: 4,bottom: 4,trailing: 4)
item.contentInsets = NSDirectionalEdgeInsets(top: 4,trailing: 4)
// group layout deploy
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .fractionalHeight(0.2))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,subitem: item,count: 3)
let containerGroupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .absolute(215))
let containerGroup = NSCollectionLayoutGroup.vertical(layoutSize: containerGroupSize,subitems: [cellItem,group,group])
// section layout deploy
let section = NSCollectionLayoutSection(group: containerGroup)
section.contentInsets = NSDirectionalEdgeInsets(top: 4,leading: 0,trailing: 0)
// Headers layout deploy
let headerSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .absolute(18))
let header = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: headerSize,elementKind: SupplementaryViewOfKind.Header.rawValue,alignment: .top)
section.boundarySupplementaryItems = [header]
let layout = UICollectionViewCompositionalLayout(section: section)
return layout
}()
实施viewForSupplementaryElementOfKind
func collectionView(_ collectionView: UICollectionView,viewForSupplementaryElementOfKind kind: String,at indexPath: IndexPath) -> UICollectionReusableView {
guard
kind == SupplementaryViewOfKind.Header.rawValue,let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind,withReuseIdentifier: XXXHeader.identifier,for: indexPath) as? XXXHeader
else { return UICollectionReusableView() }
if isFullScreen {
// customer header with titleLabel property
header.titleLabel.text = segmentedControl.titleForSegment(at: indexPath.section)
} else {
header.titleLabel.text = nil
}
}
然后我尝试进入referenceSizeForHeaderInSection
,但无法正常工作
func collectionView(_ collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,referenceSizeForHeaderInSection section: Int) -> CGSize {
if isFullScreen {
return CGSize(width: collectionView.frame.width,height: 18)
} else {
return CGSize.zero
}
}
有什么想法或新方法可以隐藏“合成版面”页眉。