【问题标题】:UICollectionView - iOS 10 - crash on iPhone 6 Plus simulator but works on real deviceUICollectionView - iOS 10 - 在 iPhone 6 Plus 模拟器上崩溃但在真实设备上工作
【发布时间】:2017-04-06 07:22:32
【问题描述】:

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

-[_UIFlowLayoutSection 中的断言失败 computeLayoutInRect:forSection:invalidating:invalidationContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.5.2/UIFlowLayoutSupport.m:823

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

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

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

知道为什么会崩溃吗?

【问题讨论】:

标签: ios swift autolayout uicollectionview ios10


【解决方案1】:

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

在UIViewController 子类中:

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

或在UIView 子类中:

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

【讨论】:

  • 这被认为是 Apple 的错误,还是我们做错了什么?这整件事对我有用,只要我使用UICollectionViewController,一旦切换到UIViewController,我就会收到这个错误:-/
  • IMO,这是 UIKit 的一个错误。如果您支持 iOS 10,则需要解决该错误。
  • 谢谢,您的回答拯救了我的一天。如果没有 iOS 11 中的解决方法,它可以正常工作,但对于 iOS 10,您需要调用 invalidateLayout()
  • 为我工作!谢谢!
【解决方案2】:

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

func numberOfSections(in collectionView: UICollectionView) -> Int {
    collectionView.layoutIfNeeded() // Patch: only to solve UIKit crash on Plus models
    return 1
}

在不同的 UICollectionViewDataSources 方法中做同样的事情 也可以使用

根据 orxelm 在 collectionViewContentSize in iOS 10 using self-sizing cells 上的回答对我有用的回答

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

【讨论】:

  • thnx 修复了 iPhone 和运行 iOS 10 的崩溃问题
  • 乐于助人:)
猜你喜欢
  • 2014-09-03
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
相关资源
最近更新 更多