我正在尝试在Xcode 5中开发我的应用程序,并在iOS 7环境下对其进行调试。
我有一个自定义的UICollectionViewLayoutAttributes。
我打算在长按UICollectionViewCell之后做一些事情,所以我重写了UICollectionViewCell.m中的方法。
- (void)applyLayoutAttributes:(MyUICollectionViewLayoutAttributes *)layoutAttributes
{
[super applyLayoutAttributes:layoutAttributes];
if ([(MyUICollectionViewLayoutAttributes *)layoutAttributes isActived])
{
[self startShaking];
}
else
{
[self stopShaking];
}
}
在iOS 6或更低版本中,-applyLayoutAttributes:在我调用以下语句后被调用。
UICollectionViewLayout *layout = (UICollectionViewLayout *)self.collectionView.collectionViewLayout;
[layout invalidateLayout];
但是,在iOS 7中,即使我重新加载CollectionView,也不会调用-applyLayoutAttributes:。
那是Apple稍后会修复的bug,还是我必须做些什么?
最佳答案
在iOS 7中,必须重写UICollectionViewLayoutAttributes子类中的isEqual:才能比较您拥有的所有自定义属性。
isEqual:的默认实现不比较您的自定义属性,因此始终返回YES,这意味着-applyLayoutAttributes:不会被调用。
试试这个:
- (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;
}
关于uicollectionview - 如何在iOS 7中刷新UICollectionViewCell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18539874/