Я хочу реализовать липкие заголовки в макете просмотра коллекции, но эффективным способом. Я просмотрел документацию на яблоко, и нашел UICollectionViewLayoutInvalidationContext.Как сделать липкие заголовки с макетом просмотра коллекции (а не раскладкой) и UICollectionViewLayoutInvalidationContext?
Я реализовал этот объект вместе с моей собственной коллекцией вида просмотра. Моя цель состояла в том, чтобы не позвонить prepareLayout
, когда свиток коллекции открывается.
Я закодирован следующим в моем пользовательском макете вид коллекции:
- (BOOL) shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{
return YES;
}
+ (Class)invalidationContextClass{
return [InvalidationContext class];
}
- (void)invalidateLayoutWithContext:(UICollectionViewLayoutInvalidationContext *)context{
NSMutableArray * indexPaths = [NSMutableArray new];
NSInteger numberOfSections = self.collectionView.numberOfSections;
for (NSInteger section = 0; section < numberOfSections; section++) {
NSInteger numberOfItemsInSection = [self.collectionView numberOfItemsInSection:section];
if (numberOfItemsInSection > 0) {
[indexPaths addObject:[NSIndexPath indexPathForRow:0 inSection:section]];
}
}
[context invalidateItemsAtIndexPaths:indexPaths];
[super invalidateLayoutWithContext:context];
}
И это мой UICollectionViewLayoutInvalidationContext подкласс:
#import "InvalidationContext.h"
@implementation InvalidationContext
- (BOOL)invalidateEverything {
return NO;
}
@end
Кто-то может помочь мне узнать, что это не так?
Примечание:Мои липкие заголовки - это первая строка для каждой секции. Я также не смог реализовать заголовки с дополнительными представлениями.
«реализовать заголовки с дополнительными видами»: вот путь. Если у вас есть проблемы, задайте новый вопрос и покажите, что вы сделали, что вы ожидаете и что на самом деле происходит. – shallowThought