ios - Swift UI Collection View 布局

标签 ios swift uicollectionview

我正在尝试在 SpriteKit 游戏中使用 UIcollectionView 来显示关卡选择场景。收藏 View 有 6 个部分(开始、世界 1-5),每个部分有 8 个单元格(级别 1-8)。目前它们是带有简单 UILabel 的自定义单元格。 我可以使用索引路径的 did 选择项来加载我的关卡,这一切都很好。但是我的问题如下

Collection View 中的第一部分是开始屏幕,因此我不希望 Collection View 显示该部分中的 8 个单元格。该部分应该仅显示背景图像和点击启动标签。所以我在 cellForIndexPath 中尝试的是

1) 隐藏该部分中的单元格,但这会导致其他部分中的单元格出现文本标签问题

2)隐藏文本标签并使单元格颜色透明,与1相同问题

那么基本上我可以做什么来解决这个问题呢?

我可以将开始部分放入不同的 SKScene 中,但我更喜欢将其全部放在 Collection View 中。 我想到的另一个选择是让每个部分只有 1 个单元格(屏幕大小),并向除开始部分之外的每个部分添加 8 个 UIButton。 我还需要禁用其中一些单元格/按钮,直到解锁上一个级别。我不确定更好的方法是什么,8 个单元格作为按钮还是 1 个单元格中 8 个 UIButton。

我只是在寻找 UICollectionView 解决方案,我已经有了替代方案,因为在转换为 tvOS 并使用焦点内容并通过 30 多个按钮的 6 个部分进行导航时,它会让我的生活变得更加轻松

非常感谢您的帮助

最佳答案

您可以在 UICollectionView 中注册不止一种单元格:

  • 如果您使用界面构建器,请从对象库添加另一个 Collection View 单元并设置其重用标识符
  • 否则,使用 self.collectionView?.registerNib(forCellWithReuseIdentifier:)self.collectionView?.registerClass( 在 UICollectionViewController 的 viewDidLoad 方法中注册 nib 或类forCellWithReuseIdentifier:)

然后,当您使单元出队时,使用正确的重用标识符:

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    var reuseIdentifier = "identifier of cell with 8 button"
    if indexPath.section == 0 {
        reuseIdentifier = "identifier of start cell as you set in IB of viewDidLoad"
    }
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath)

    // Configure the cell depending on indexPath

    return cell
}

关于ios - Swift UI Collection View 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983338/

相关文章:

ios - 字符串中的日期不适用于特定日期

ios - 如果后台任务过期则不调用 didBecomeActive

ios - 如何在 iOS Swift 3 中将 JSON 字符串转换为字典数组

ios - sublayerTransform 的动画持续时间被忽略

ios - 如何获取自定义 TextView 的inputView?

ios - Google Maps URL Scheme 不显示标记

swift - UISearchBar.value for key 在 swift 中做什么?

scroll - UICollectionView有效拖放

ios - 在 iOS 13 上拖动时 UICollectionView 单元格会捕捉到原始位置

iphone - 在 UICollectionView 上重置滚动