iOS 10
At iOS 10, a new feature is introduced, it is Cell Prefetching
. It will let dynamic position of SupplementaryView
crash. In order to run in the old behavior, it needs to disable prefetchingEnabled
. It's true
by default at iOS 10.
// Obj-C
// This function is available in iOS 10. Disable it for dynamic position of `SupplementaryView `.
if ([self.collectionView respondsToSelector:@selector(setPrefetchingEnabled:)]) {
self.collectionView.prefetchingEnabled = false;
}
// Swift
if #available(iOS 10, *) {
// Thanks @maksa
collectionView.prefetchingEnabled = false
// Swift 3 style
colView.isPrefetchingEnabled = false
}
I hate this problem. I spend 2 days for this problem.
A reference about Cell Pre-fetch @iOS 10.
iOS 9 and before ...
@Away Lin is right.. I solve the same problem by implementing that delegate method.
My Custom UICollectionViewLayout
will modify the attributes in layoutAttributesForElementsInRect
. The section position is dynamic, not static. So, I obtain warnings about the layout attributes for supplementary item at index path ... changed from ... to ...
. Before the changes, invalideLayout
related methods should be called.
And, after implementing this delegate method to return true
, the method invalidateLayoutWithContext:
will be called when scrolling the UICollectionViewLayout
. By default, it returns false
.
- (BOOL) shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {
return YES;
}
Return Value
true if the collection view requires a layout update or false if the
layout does not need to change.
Discussion The default implementation of this method returns false.
Subclasses can override it and return an appropriate value based on
whether changes in the bounds of the collection view require changes
to the layout of cells and supplementary views.
If the bounds of the collection view change and this method returns
true, the collection view invalidates the layout by calling the
invalidateLayoutWithContext: method.
Availability Available in iOS 6.0 and later.
And more ...
A nice example project on GitHub, for custom UICollectionViewLayout.