Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UICollectionView在执行更新时查看奇怪的动画_Ios_Swift_Xcode_Uicollectionview_Uikit - Fatal编程技术网

Ios UICollectionView在执行更新时查看奇怪的动画

Ios UICollectionView在执行更新时查看奇怪的动画,ios,swift,xcode,uicollectionview,uikit,Ios,Swift,Xcode,Uicollectionview,Uikit,在具有contentOffset.x>0的水平滚动UICollectionView上调用performbatchUpdate时,它会执行一个相当奇怪的动画 我用一个示例单元格重新创建了这个错误,它准确地显示了我们在应用程序中得到的错误。当performbatchUpdate中根本没有要执行的更改时,也会发生这种情况。完成后,UICollectionView中的项目是正确的,因此这只是一个动画问题 有没有人已经面对过这个问题,并且有解决这个问题的办法 我的ViewController.swift

在具有
contentOffset.x>0
的水平滚动
UICollectionView
上调用
performbatchUpdate
时,它会执行一个相当奇怪的动画

我用一个示例单元格重新创建了这个错误,它准确地显示了我们在应用程序中得到的错误。当
performbatchUpdate
中根本没有要执行的更改时,也会发生这种情况。完成后,
UICollectionView
中的项目是正确的,因此这只是一个动画问题

有没有人已经面对过这个问题,并且有解决这个问题的办法

我的
ViewController.swift

class CollectionViewCell: UICollectionViewCell {
    @IBOutlet var label: UILabel!
}

class ViewController: UIViewController {
    @IBOutlet private var collectionView: UICollectionView!
    
    private var items: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let layout = UICollectionViewFlowLayout()
        layout.estimatedItemSize = CGSize(width: 1, height: 1)
        layout.scrollDirection = .horizontal
        
        collectionView.collectionViewLayout = layout
        collectionView.dataSource = self
        collectionView.delegate = self
        collectionView.contentInset = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10)
        collectionView.showsHorizontalScrollIndicator = false
    }
}

extension ViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        items.count
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as? CollectionViewCell
        
        cell?.label.text = items[indexPath.row].description
        
        return cell ?? UICollectionViewCell()
    }
}

extension ViewController: UICollectionViewDelegate {
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        items.remove(at: indexPath.row)
        
        collectionView.performBatchUpdates({
            self.collectionView.deleteItems(at: [indexPath])
        }, completion: nil)
    }
}
在此处下载示例项目:

您必须为collectionView单元格设置
itemSize

layout.itemSize = CGSize(width: 44, height: 44)
代替(或补充):

更多关于估计值和需要时间的信息:

和项目大小:


不客气

您必须为collectionView单元格设置
itemSize

layout.itemSize = CGSize(width: 44, height: 44)
代替(或补充):

更多关于估计值和需要时间的信息:

和项目大小:


不客气

我想使用自动调整大小,而不是固定的项目大小。每个项目都有不同的宽度。使用
layout.estimatedItemSize=UICollectionViewFlowLayout.automaticSize
也不起作用。@fgroeger如果按照这个答案的建议去做,问题实际上会消失吗?当我设置固定的项目大小时,它会起作用,是的!但这不是一个选项,因为每个项目都有不同的宽度。@fgroeger但问题是您管理的自调整单元格不正确。无论固定大小是否正确,如果这个答案解决了问题,您需要考虑到这一事实。但它不可能是一个解决方案,不仅仅是使用自调整大小单元格,为什么它会存在?我想使用自动调整大小,而不是固定项目大小。每个项目都有不同的宽度。使用
layout.estimatedItemSize=UICollectionViewFlowLayout.automaticSize
也不起作用。@fgroeger如果按照这个答案的建议去做,问题实际上会消失吗?当我设置固定的项目大小时,它会起作用,是的!但这不是一个选项,因为每个项目都有不同的宽度。@fgroeger但问题是您管理的自调整单元格不正确。无论固定大小是否正确,如果这个答案解决了这个问题,你需要考虑到这一事实。但它不可能是一个解决方案,不仅仅是使用自调整大小的单元格,为什么它会存在?我下载了你的项目并运行了它,发生的第一件事是控制台中转储了100个严重警告。在你解决这些问题之前,绝对没有必要继续。您的单元格估计大小和自动布局约束管理不正确。我下载了您的项目并运行了它,发生的第一件事是在控制台中转储了100个严重警告。在你解决这些问题之前,绝对没有必要继续。单元格估计大小和自动布局约束的管理不正确。