如何更改 UICollectionView zIndex?

How to change UICollectionView zIndex?

检查下图。我需要 突出显示 焦点单元格,使其位于 collectionView.
中的所有单元格之上 我知道我必须更改焦点单元格的 zIndex。怎么做?
我需要逻辑。我的代码在 objective-c.

这是针对 tvOS 但我想 iOS 代码也可以在这里工作。

您需要创建自定义集合视图流布局。根据集合视图的滚动位置或可见矩形计算 zIndex。示例 class 如下所示。

final class CustomCollectionViewLayout: UICollectionViewFlowLayout {

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        let attributes = super.layoutAttributesForElements(in: rect)
        attributes?.forEach {
            [=10=].zIndex = 0 //Compute and set
        }
        return attributes
    }

    override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
        let attribute = super.layoutAttributesForItem(at: indexPath)
        attribute?.zIndex = 0 //Compute and set
        return attribute
    }
}

您是否尝试过为 cell.layer.zPosition 设置值?

尝试手动应用 layer.zPosition 成为 UICollectionViewCell 子类的 applyLayoutAttributes: 方法中的 zIndex

- (void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
{
    [super applyLayoutAttributes:layoutAttributes];
    self.layer.zPosition = layoutAttributes.zIndex;
}

也许将集合视图的 z 位置设置为 -2,取消突出显示为 -1,突出显示为 0