【问题标题】:UICollectionView group sections?UICollectionView 组部分?
【发布时间】:2016-10-07 16:27:05
【问题描述】:

如果它太基本,请原谅我,但我可能会在这里错过一些东西。

我有一个集合,其中每个部分都有 1 个或多个元素。 发生的情况是,我将整个列表视为 1 个列表,部分之间没有区别。

我想要的效果很自然,如果一个section有3个元素,我只看到第一个,如果我推它,我可以看到section里面的其他元素,再推一下就关闭了。

这是我必须手动执行的操作吗?它不是现在与部分一起使用的方式。

(这种形式的部分有什么意义?只是为了获取标题?这个我可以自己做)

【问题讨论】:

    标签: swift uicollectionview


    【解决方案1】:

    没有内置方法可以按照您所描述的方式使部分可展开/折叠,但如果您真的愿意,您完全可以这样做。只需将部分的大小设置为足够大,默认情况下仅显示一个单元格,如果有人点击该部分,则将该部分的大小设置为足够大以显示其余部分。您最终将不得不维护一系列展开的部分,以便每次重新加载时都知道哪些部分显示一个单元格以及哪些部分显示全部。

    这很痛苦,但我以前在工作中被要求这样做,而且效果很好。做这种事情有一些不可避免的后果,但如果你真的需要,你可以解决它们。

    【讨论】:

    • 多谢,有什么必然后果? :)
    • 每次重新加载时,您都必须不断计算部分所需的大小,因此它最终可能是相当数量的数学运算。最重要的是,我发现用于展开和折叠单元格的动画可能需要进行大量调整才能看起来正确。你会明白我的意思——默认情况下它们看起来有点乱。
    • 哦,我明白了。那是一团糟。但是如果我尝试将所有单元格设置为相同的固定大小,我仍然会看到每个部分内的单元格..
    • 是的 - 这是默认行为。除此之外的任何东西都将是您自己的定制。
    【解决方案2】:

    我找到了一种非常简单的方法。

    我不立即使用部分。我所做的是设置 1 节和多行,然后每一行将只显示数据数组中的第一个元素(假设数据数组的每个元素都是一个数组)。在选择时,我会重新加载带有部分的表格。

    当用户选择一行时,我检查它是否有多个值:

      func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            var inSection=[String]()
            inSection=data[indexPath.row]
        if ( inSection.count>1)
        {
            //MULTIPLE VALUES IN CELL
               OpenGroup=indexPath.row
               collectionView.reloadData()
    
    
        }
    

    另外,当我加载时,我会这样设置代表:

      func numberOfSections(in collectionView: UICollectionView) -> Int {
            if(OpenGroup > -1 ){ return data.count} //case open group
    
               return 1   //case closed group
    
        }
    
    
        internal func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    
            if(OpenGroup > -1 ) {return data[section].count}
            return data.count
        }
    

    在这种情况下,当我在选定单元格上有多个值时,我只需更新一个变量来说明打开的部分,然后重新加载集合。

    正如您在委托中看到的,如果有一个打开的单元格,它将设置集合为多个部分,否则为 1 个部分和多行。

    它运行良好,只需要很少的代码。

    数据,保持原样-使用分组-所以当用户重新加载表格时,他会得到原始数据数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多