ios - UICollectionView刷新问题

标签 ios swift uicollectionview uicollectionviewlayout

在一个 iOS 应用程序中,我有一个 UICollectionView,它有 100(或 80,或 40)个开始的单元格。 一开始一切都很好,布局还可以,每个单元格的大小也合适,100个就小一些,只有40个就大一些。

在应用内,用户可以将单元格数量更改为 100(或 80,或 40)。 当数字发生变化时,每个单元格的布局和大小都应相应更改。但是那部分没有按预期工作。

当用户更改单元格数量时,将执行此代码:

myCollectionView.reloadData()
myCollectionView.collectionViewLayout.invalidateLayout()

由于某些原因,有些东西不起作用。我应该在上面的代码中做更多或不同的事情吗? 单元格的数量是正确的,但新闻单元格的大小乱七八糟,我对布局(定位)不太确定。

就UICollectionViewDelegate协议(protocol)而言,我只实现了一个方法:

func collectionView(_ collectionView: UICollectionView,
                    didSelectItemAt indexPath: IndexPath) {
    .........
}

对于 UICollectionViewDelegateFlowLayout 协议(protocol),我实现了以下内容:

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
     let cellSide = UIScreen.main.bounds.width * 3 / CGFloat(brain.getSide()! * 4)
    return CGSize(width: cellSide, height: cellSide)
}


func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 6.0
}


func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return UIScreen.main.bounds.width / (CGFloat(brain.getSide()!) * 4.4)
}

看起来上面的方法在开始时工作正常,给出了足够的值。但是当用户更改设置时,它们甚至似乎都不会被调用。

最佳答案

请试试这个重载方法

objective-c

[self.collectionView performBatchUpdates:^{
                                            [myCollectionView reloadData];
                                          } 
                              completion:^(BOOL finished) {}
];

swift -3

myCollectionView?.performBatchUpdates({
            myCollectionView.reloadData()
        }, completion: { (result: Bool) in
        })

关于ios - UICollectionView刷新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43061207/

相关文章:

ios - 无法以编程方式执行 segue

swift - UNCalendarNotificationTrigger 每 3 天?

swift/火力地堡 : How do I properly store a Facebook user into Firebase database when they create an account?

ios - 如何在收藏 View 中显示复选标记(图像)

ios - 如何将解析的 JSON 数据放入 CollectionViewCell

ios - UICollectionView,来自注册为单元格的框架目标的 nib 在运行时失败

iphone - layoutSubviews 究竟什么时候被自定义 UITableViewCell 调用?

ios - iOS UIAlertView 中未使用的表达式结果

swift - Swift 中隐式展开的惯用用法

ios - 有没有办法预加载 UICollectionViewCell?