UICollectionView reloadData奇怪的行为

时间:2013-12-23 12:02:12

标签: ios objective-c uicollectionview

我有故事板,使用UICollectionView查看,带插座的视图控制器。记录使用Web服务加载:

[[API sharedInstance] getCommentsForArticle:[self.article[@"id"] integerValue] withPage:self.commentsPage onSuccess:^(NSArray *responseData) {
    NSLog(@"LoadCommentsThread: %@", [NSThread currentThread]);
    [self.allCommentsCache addObjectsFromArray:responseData];
    [self.allCommentsCollectionView reloadData];
} onFail:^(NSError *error) {
    DLog(@"Handle error");
}];

每个collectionview请求的项目数都是正确的:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section

项目的大小是正确计算的,甚至为每个单元格尝试了不变的大小:

if (collectionView == self.allCommentsCollectionView) {
    NSString *commentText = self.allCommentsCache[indexPath.row][@"text"];
    CGSize maximumLabelSize = CGSizeMake(300,9999);
    CGSize expectedLabelSize = [commentText sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:15.0f]
                                       constrainedToSize:maximumLabelSize
                                           lineBreakMode:NSLineBreakByWordWrapping];
    return CGSizeMake(320, 150);
}

问题在于:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

在初始运行时,数据源阵列上有30个元素,并且它已正确加载。当加载更多时,numberofitems返回正确的项目数,sizeforitem会遍历所有项目,但cellforitem仅适用于最初的30项。无论是否有100件,200件以上的物品。

有类似问题的人吗?

0 个答案:

没有答案