How to refresh UICollectionViewCell in iOS 7?
ios7, uicollectionview, uicollectionviewcell, xcode5
Solution
In iOS 7, you must override isEqual: in your UICollectionViewLayoutAttributes subclass to compare any custom properties that you have.
The default implementation of isEqual: does not compare your custom properties and thus always returns YES, which means that -applyLayoutAttributes: is never called.
Try this:
- (BOOL)isEqual:(id)other {
if (other == self) {
return YES;
}
if (!other || ![[other class] isEqual:[self class]]) {
return NO;
}
if ([((MyUICollectionViewLayoutAttributes *) other) isActived] != [self isActived]) {
return NO;
}
return YES;
}
Problem
I am trying to develop my app in Xcode 5 and debug it under iOS 7 environment. I have a customized UICollectionViewLayoutAttributes. I plan to do something after long pressing on UICollectionViewCell, so I override the method in UICollectionViewCell.m ``` - (void)applyLayoutAttributes:(MyUICollectionViewLayoutAttributes *)layoutAttributes { [super applyLayoutAttributes:layoutAttributes]; if ([(MyUICollectionViewLayoutAttributes *)layoutAttributes isActived]) { [self startShaking]; } else { [self stopShaking]; } } ``` In iOS 6 or below, - applyLayoutAttributes: is called after I call the statements below. ``` UICollectionViewLayout *layout = (UICollectionViewLayout *)self.collectionView.collectionViewLayout; [layout invalidateLayout]; ``` However, in iOS 7, - applyLayoutAttributes: is NOT being called even if I reload the CollectionView. Is that a bug which is gonna be fixed by Apple later on, or I have to do something?