Tôi đã có UICollectionView điển hình đang sử dụng UICollectionViewFlowLayout theo kiểu thẳng đứng. Tôi đang sử dụng API còn lại có phân trang để điền vào chế độ xem bộ sưu tập. Để kích hoạt các trang tiếp theo để tải về, Tôi đang sử dụng các đại biểu khi nó yêu cầu bố trí footer:Các vấn đề chèn vào phần UICollectionView có chứa một chân trang
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
RDLoadMoreReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"RDLoadMoreReusableView" forIndexPath:indexPath];
view.delegate = self;
[view start];
[self loadNextPageOfAssets];
return view;
}
Đây là mã đằng sau loadNextPageOfAssets tôi:
-(void)loadNextPageOfAssets{
__weak RDRadiusGridViewController *weakSelf = self;
// Increment page and request assets. They are added to cluster.assets before the completion block is called.
self.cluster.pagination.page++;
[self.cluster requestAssetsWithCompletionBlock:^(NSArray *assets) {
SM_LOG_DEBUG(@"page.total: %ld assets.count: %ld", self.cluster.pagination.totalCount, (long)assets.count);
NSMutableArray *indexPaths = [[NSMutableArray alloc]initWithCapacity:assets.count];
for(NSUInteger index = 0; index < assets.count; index++){
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:self.cluster.assets.count - assets.count + index inSection:0];
SM_LOG_DEBUG(@"Inserting indexPath: %ld:%ld", (long)indexPath.item, (long)indexPath.section);
[indexPaths addObject:indexPath];
}
[weakSelf.collectionView performBatchUpdates:^{
[weakSelf.collectionView insertItemsAtIndexPaths:indexPaths];
} completion:^(BOOL finished) {
}];
// [weakSelf.collectionView reloadData];
}];
}
Khi tôi chạy tôi có thể truy cập ViewController của tôi và xem trang đầu tiên của nội dung được tải. Nếu tôi di chuyển xuống tôi sẽ xem xem chân (trong đó có một spinner), nhưng sau đó mã sẽ phá vỡ tại điểm hòa vốn ngoại lệ tại dòng:
[weakSelf.collectionView insertItemsAtIndexPaths:indexPaths];
thất bại Assertion trong - [UICollectionViewData layoutAttributesForSupplementaryElementOfKind: atIndexPath:] , /SourceCache/UIKit/UIKit-3185.20/UICollectionViewData.m:829
Sau đó, nếu tôi tiếp tục nó bị treo với lỗi:
2014/06/11 16: 39: 58,335 Radius-iOS [ 4901: 525006] * Chấm dứt ứng dụng do còn tự do ngoại lệ 'NSInternalInconsistencyException', lý do: 'không dụ UICollectionViewLayoutAttributes cho -layoutAttributesForSupplementaryElementOfKind: UICollectionElementKindSectionFooter tại đường {chiều dài = 2, đường dẫn = 0 - 0}' * Đầu tiên gọi ném stack:
này là khó hiểu để tôi. layoutAttributesForSupplementaryElementOfKind âm thanh như nó là seomthing để làm với lớp bố trí, nhưng tôi không sử dụng một bố trí dòng tùy chỉnh thay vì một mặc định cung cấp. Nghe có vẻ như mã của Apple là điên nhưng tôi cảm thấy rằng tôi đang sử dụng mọi thứ một cách chính xác.
Bây giờ nếu tôi di chuyển cuộc gọi:
[self loadNextPageOfAssets];
từ dequeue di động bổ sung cho teh UICollectionViewCell deque, và loại bỏ các quan điểm chân tất cả lại với nhau, sau đó chèn các công trình lớn.
Hiện tại tôi đang gọi lại tải lạiData thay vì chèn, nhưng đây là UGLY.
Tôi có thấy cái gì về chân trang không?
wel .. cho người mới bắt đầu bạn có thể kiểm tra các yếu tố bổ sung loại đó được thông qua vào viewForSupplementaryElementOfKind – govi