UICollectionView-iOS 10-在iPhone 6 Plus模拟器上崩溃,但在真实设备上工作

UICollectionView-iOS 10-在iPhone 6 Plus模拟器上崩溃,但在真实设备上工作,ios,swift,autolayout,uicollectionview,ios10,Ios,Swift,Autolayout,Uicollectionview,Ios10,我已经创建了一个UICollectionView,它在模拟器和真实设备上都可以很好地运行在小设备上,比如iPhone 5s/SE/6/6s/7,但是当涉及iPhone 6Plus、iPhone 7Plus和任何iPad版本时,我遇到了一个奇怪的情况。它在真实设备上运行良好,但在模拟器中崩溃,出现以下错误: -[\u UIFlowLayoutSection中的断言失败 ComputeLayoutDirect:forSection:invalidating:invalidationContext:]

我已经创建了一个UICollectionView,它在模拟器和真实设备上都可以很好地运行在小设备上,比如iPhone 5s/SE/6/6s/7,但是当涉及iPhone 6Plus、iPhone 7Plus和任何iPad版本时,我遇到了一个奇怪的情况。它在真实设备上运行良好,但在模拟器中崩溃,出现以下错误:

-[\u UIFlowLayoutSection中的断言失败 ComputeLayoutDirect:forSection:invalidating:invalidationContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit\u Sim/UIKit-3600.5.2/UIFlowLayoutSupport.m:823

由于未捕获异常而终止应用程序 “NSInternalInconsistencyException”,原因: “UICollectionViewFlowLayout内部错误”

到目前为止,我发现,如果我删除estimatedItemSize,它可以正常工作,但自动布局不再工作,但如果我启用了它,它会在模拟器中崩溃

我使用的是最新的Xcode版本和iOS 10


知道它为什么会崩溃吗?

在布局之前调用
invalidateLayout
是解决此问题的一种方法

UIViewController
子类中:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}
override func layoutSubviews() {
    super.layoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}
或者在
ui视图
子类中:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}
override func layoutSubviews() {
    super.layoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}

在布局之前调用
invalidateLayout
,是解决此问题的一种方法

UIViewController
子类中:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}
override func layoutSubviews() {
    super.layoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}
或者在
ui视图
子类中:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}
override func layoutSubviews() {
    super.layoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}
这是iOS10中一些奇怪的错误,仅适用于iPhone Plus设备。我已经 面对同样的问题,我的解决方案是像这样调用layoutIfNeeded 这:

在不同的UICollectionViewDataSources方法中执行相同的操作 这也行

根据orxelm在

使布局无效似乎会阻止我的collectionView使用我的流布局,而是使用默认布局。这迫使我所有的细胞都保持相同的大小,这不是我想要的结果(无论如何对我来说)

这是iOS10中一些奇怪的错误,仅适用于iPhone Plus设备。我已经 面对同样的问题,我的解决方案是像这样调用layoutIfNeeded 这:

在不同的UICollectionViewDataSources方法中执行相同的操作 这也行

根据orxelm在


使布局无效似乎会阻止我的collectionView使用我的流布局,而是使用默认布局。这迫使我所有的细胞大小都一样,这不是我想要的结果(无论如何对我来说)。

你看到这个非常奇怪的东西了吗。你试过清理DerivedData文件夹吗?@PrafulD是的,但我没有这个案例。你看这个很奇怪。你试过清理DerivedData文件夹吗?@PrafulD是的,但我没有这种情况。这被认为是来自苹果的bug,还是我们做错了什么?这整件事对我来说都很有效,只要我使用了
UICollectionViewController
,一旦切换到
UIViewController
,我就得到了这个错误:-/IMO,这是UIKit的一个bug。如果你支持iOS 10,你需要解决这个问题。谢谢,你的回答救了我一天。如果没有iOS 11中的解决方法,它工作得非常好,但是对于iOS 10,您需要调用invalidateLayout()来为我工作!非常感谢。这被认为是来自苹果的bug,还是我们做错了什么?这整件事对我来说都很有效,只要我使用了
UICollectionViewController
,一旦切换到
UIViewController
,我就得到了这个错误:-/IMO,这是UIKit的一个bug。如果你支持iOS 10,你需要解决这个问题。谢谢,你的回答救了我一天。如果没有iOS 11中的解决方法,它工作得非常好,但是对于iOS 10,您需要调用invalidateLayout()来为我工作!非常感谢。thnx它已经修复了iPhone plus运行iOS 10时的崩溃乐于帮助:)thnx它已经修复了iPhone plus运行iOS 10时的崩溃乐于帮助:)