iOS 18+ 上的背景装饰视图重叠集合视图单元格

问题描述 投票:0回答:1

我的 UICollectionView 布局遇到问题,其中背景装饰视图与集合视图单元格重叠。以下是我的布局配置的相关代码:

let itemSize = NSCollectionLayoutSize(
    widthDimension: .absolute(60),
    heightDimension: .absolute(100)
)
let item = NSCollectionLayoutItem(layoutSize: itemSize)

let groupSize = NSCollectionLayoutSize(
    widthDimension: .fractionalWidth(1),
    heightDimension: .absolute(100)
)
let group = NSCollectionLayoutGroup.horizontal(
    layoutSize: groupSize,
    subitems: [item]
)

let section = NSCollectionLayoutSection(group: group)
section.decorationItems = [
    NSCollectionLayoutDecorationItem.background(elementKind: "customBackgroundElementKind")
]
return section

调试视图层次结构

问题:背景装饰视图出现在集合视图单元格的顶部,这导致单元格被遮挡。此问题特定于 iOS 18,在 iOS 17 及更低版本上不会出现。

请求:任何人都可以提供指导或建议解决方案,以确保装饰视图不会与 iOS 18 上的集合视图单元格重叠吗?

谢谢!

我尝试过的:我尝试使用 NSCollectionLayoutDecorationItem 的默认配置向我的 UICollectionView 添加背景装饰视图。我的期望是背景视图将出现在集合视图单元格后面。

我的期望:我期望背景装饰视图呈现在集合视图单元格后面,为该部分提供背景。

实际结果:在iOS 18+中,背景装饰视图出现在集合视图单元格的顶部,这导致单元格被遮挡。 iOS 17 及以下版本不会出现此问题。

ios swift uikit uicollectionviewcompositionallayout ios18
1个回答
0
投票

我们的项目中遇到了同样的问题,这就是我们如何解决它的方法:

override func collectionView(_ collectionView: UICollectionView, willDisplaySupplementaryView view: UICollectionReusableView, forElementKind elementKind: String, at indexPath: IndexPath) {
    guard elementKind == "customBackgroundElementKind" else { return }
    // Custom logic for setting background color
    let backgroundView = view as? BackgroundSection
    backgroundView?.setColor(.red)

    // actual workaround
    if #available(iOS 18.0, *) {
        backgroundView?.layer.zPosition = -5
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.