【问题标题】:Section Header zIndex in UICollectionView CompositionalLayout - iOS 13UICollectionView CompositionalLayout 中的部分标题 zIndex - iOS 13
【发布时间】:2020-05-23 12:40:12
【问题描述】:

由于某些原因,在新的 collectionview 组合布局中,节标题的 zIndex 属性不起作用。我尝试了下面的代码来实现这种行为。

func configureCategorySectionLayout() -> NSCollectionLayoutSection {
        let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .fractionalHeight(1))
        let layoutItem = NSCollectionLayoutItem(layoutSize: itemSize)

        let groupSize = NSCollectionLayoutSize(widthDimension: .absolute(80), heightDimension: .absolute(105))
        let groupItem = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [layoutItem])

        let sectionLayout = NSCollectionLayoutSection(group: groupItem)

        let sectionItem = createAddressSectionHeader()
        sectionItem.zIndex = 2
        sectionItem.pinToVisibleBounds = true
        sectionLayout.boundarySupplementaryItems = [sectionItem]
        sectionLayout.contentInsets = .init(top: 0, leading: 10, bottom: 0, trailing: 10)
        sectionLayout.orthogonalScrollingBehavior = .continuous
        return sectionLayout
    }

func createAddressSectionHeader() -> NSCollectionLayoutBoundarySupplementaryItem {
        let sectionHeaderSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .absolute(65))
        let sectionHeaderItem = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: sectionHeaderSize, elementKind: UICollectionView.elementKindSectionHeader, alignment: .top)
        return sectionHeaderItem
    }

【问题讨论】:

  • 面临同样的问题,您找到解决问题的方法了吗?
  • 不,亲爱的...!! @PhM
  • 当您将orthogonalScrollingBehavior 设置为.none 以外的其他值时,似乎会发生这种情况

标签: ios swift uicollectionviewlayout swift5


【解决方案1】:

您可以通过将以下 sn-p 添加到您的 UICollectionReusableView 子类(和/或 UICollectionViewCell 子类)来解决此问题:

public override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
     super.apply(layoutAttributes)
     self.layer.zPosition = CGFloat(layoutAttributes.zIndex)
}

【讨论】:

  • 我会试试的。谢谢!
  • 好吧,我必须说它比以前更好。它现在出现在前面,但是当我向前滚动时,标题只会在滚动中间消失。当我向后滚动时它变得可见。我的意思是在第二部分坚持到第一之前它消失了。
  • @CrackIt 我注意到了同样的行为,这太烦人了。我修复了 zLayer 问题,但标题无论如何都会消失,即使 pinToVisibleBounds 设置为 true
  • @Adam 完全正确,由于某种原因它没有固定。
  • 哇,这对查找很有帮助-谢谢@PhM 这使用自定义可重用补充视图为我在 CompositionalLayout 中解决了 zIndex 问题
【解决方案2】:

我在使用 iOS 13 + Compositional Layout 时遇到了同样的问题。我的收藏视图中的单元格位于粘性标题的顶部。我通过在组合布局配置中设置标题的 zIndex 来解决它,然后在我的 reusableView 类和我的 collectionviewCell 类中覆盖 ApplyLayoutAttributes。

class FoodCategorySectionHeader: UICollectionReusableView {

...

override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
      super.apply(layoutAttributes)
      layer.zPosition = CGFloat(layoutAttributes.zIndex)
   }
}
class FoodCell: UICollectionViewCell {

...

override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
       super.apply(layoutAttributes)
      layer.zPosition = 0.0
   }
}

我的组合布局代码中的相关部分:

func createFoodSection(using section: FoodCategory) -> NSCollectionLayoutSection {

...      

      let layoutSectionHeader = createSectionHeader()
      layoutSectionHeader.zIndex = 1000
      layoutSectionHeader.pinToVisibleBounds = true
      
...

      layoutSection.boundarySupplementaryItems = [layoutSectionHeader]
      
      return layoutSection
   }

【讨论】:

  • 似乎从collectionview 单元格以及可重用视图中覆盖属性将起到作用。需要对此进行测试,但我不再从事该项目 bdw 非常感谢您的帮助。
  • 没问题@CrackIt!如果您认为正确,请随时将答案标记为“已接受”:)
  • 好吧,幸运的是我还有这个项目,但我尝试了你的解决方案,不幸的是它不适合我
猜你喜欢
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 2014-07-17
  • 2014-01-21
相关资源
最近更新 更多