gpt4 book ai didi

ios - 具有 collectionView 性能问题的 TableView 单元格

转载 作者:行者123 更新时间:2023-11-28 06:34:28 24 4
gpt4 key购买 nike

我有以下布局:enter image description here当滚动 tableView fps 下降到 25 左右时,它变得非常抖动。

我认为这是我对 collectionView 的实现,因为很多操作都是在 cellForIndexAtPath 中执行的。但是我看不出有什么可以优化的?

extension MyTableViewController: UICollectionViewDelegate, UICollectionViewDataSource {

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
// No sections are longer than 99
if(collectionView.tag < 100)
{
let code = codes0[collectionView.tag].objectForKey("code") as! String

return code.componentsSeparatedByString(",").count
}
else if(collectionView.tag < 200)
{
let code = codes1[collectionView.tag-100].objectForKey("code") as! String

return code.componentsSeparatedByString(",").count
}
else
{
let code = codes2[collectionView.tag-200].objectForKey("code") as! String

return code.componentsSeparatedByString(",").count
}
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("code", forIndexPath: indexPath) as! ImageCodeCollectionViewCell

// Read that this should help for GPU
cell.layer.shouldRasterize = true
cell.layer.rasterizationScale = UIScreen.mainScreen().scale

var codeLength:String! = ""

if(collectionView.tag < 100)
{
codeLength = self.codes0[collectionView.tag].objectForKey("code") as! String
}
else if(collectionView.tag < 200)
{
codeLength = self.codes1[collectionView.tag-100].objectForKey("code") as! String
}
else
{
codeLength = self.codes2[collectionView.tag-200].objectForKey("code") as! String
}

let cLength = codeLength.componentsSeparatedByString(",")

if(indexPath.row <= cLength.count)
{
cell.imageCode.image = UIImage(named: cLength[indexPath.row])
}

return cell
}

我的 tableView 看起来像:

这里是collectionView数据源和委托(delegate)集

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("cheat") as! CodeTableViewCell

cell.layer.shouldRasterize = true
cell.layer.rasterizationScale = UIScreen.mainScreen().scale

cell.setCollectionViewDataSourceDelegate(self, forRow: indexPath.row, forSection: indexPath.section)

return cell
}

func tableView(tableView: UITableView, willDisplayCell cell: CodeTableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
{
switch indexPath.section
{
case 2:
cell.name = codes2[indexPath.row].objectForKey("name") as! String

cell.descript = ((codes2[indexPath.row].objectForKey("description") as! String).isEmpty ? "-" : codes2[indexPath.row].objectForKey("description") as! String)

case 1:
cell.name = codes1[indexPath.row].objectForKey("name") as! String

cell.descript = ((codes1[indexPath.row].objectForKey("description") as! String).isEmpty ? "-" : codes1[indexPath.row].objectForKey("description") as! String)

default:
cell.name = codes0[indexPath.row].objectForKey("name") as! String

cell.descript = ((codes0[indexPath.row].objectForKey("description") as! String).isEmpty ? "-" : codes0[indexPath.row].objectForKey("description") as! String)
}
}

最佳答案

通过简要查看您的代码,您似乎只需要使用 UICollectionReusableView 作为 headersUICollectionView 设置.这样所有的 collectionViews 都会重用相同的 cells 并且您不必每次都对 collectionViews 进行布局 UITableViewCell 变得可见。

Interface Builder setup

您还可以考虑存储操作的结果,例如 code.componentsSeparatedByString(",").count 在单独的变量中,并且仅在您的数据是变了。

关于ios - 具有 collectionView 性能问题的 TableView 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39452471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com