我有一个自动调整大小的集合视图,当我调用 super.layoutSubviews 时,我的应用程序崩溃,因为集合视图进入递归更新循环。这在 iOS 14 及更低版本中运行良好。但从 iOS 15 开始就观察到了这一点。
class DynamicCollectionView: UICollectionView {
override var contentSize: CGSize {
didSet {
invalidateIntrinsicContentSize()
}
}
override func layoutSubviews() {
super.layoutSubviews()
if bounds.size != intrinsicContentSize {
invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
return contentSize
}
override func reloadData() {
super.reloadData()
invalidateIntrinsicContentSize()
layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)
}
崩溃 说:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UICollectionView(<KPFlagship.SelfSizingCollectionView 0x7f896b260e00>)卡在其更新/布局循环中。发生这种情况的原因有很多,包括自调整大小的视图,其首选属性未返回一致的大小。要调试此问题,请检查控制台应用程序中“UICollectionViewRecursion”类别中的日志。
我正在为 UICollectionView 使用 CompositionalLayout。iOS 15 之前工作正常,没有任何警告。但在 Xcode 13 和 iOS 15 中,滚动 UICollectionView 时低于警告
[UICollectionViewRecursion] cv == 0x7fc7f418e000 Disabling recursion trigger logging
Run Code Online (Sandbox Code Playgroud)
我使用不同类型的自定义单元格和使用自定义视图的自定义单元格。
这是我的单元 UICollectionView ->CustomUICollectionviewCell->CustomUIView(通过 nib 加载)的配置
如何解决这个问题?
提前致谢。