У меня есть 2 вида коллекции. Для первого представления коллекции я вижу только одну ячейку за раз, но для второго представления коллекции я вижу 8 ячеек за раз.2 Проблемы с UICollectionView с источником данных
Итак, для просмотра второй коллекции все работает нормально, но первый вид коллекции дублирует некоторые ячейки.
Если я использую этот код ниже, это вызывает некоторые проблемы с дублированными ячейками. Я не уверен, что ячейки дублируются, но каждая моя ячейка содержит изображение, отображающее изображение. Таким образом, изображения в этих ячейках дублируют 100% гарантию.
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
GalleryCollectionViewCell *collectionViewCell = (GalleryCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"GalleryCollectionViewCell" forIndexPath:indexPath];
NSDictionary *artwork = [self.artworks objectAtIndex:indexPath.item];
[collectionViewCell loadImageWithURLString:artwork[@"image_url"]];
return collectionViewCell;
}
У меня есть вид на обратный вызов выше и я добавил экземпляр моего первого представления коллекции, которая также вид сверху коллекции в моей SuperView иерархии. Теперь исходный код выглядит так:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
if ([collectionView isEqual:self.collectionViewTop])
{
GalleryCollectionViewCell *collectionViewCell = (GalleryCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"GalleryCollectionViewCell" forIndexPath:indexPath];
NSDictionary *artwork = [self.artworks objectAtIndex:indexPath.item];
[collectionViewCell loadImageWithURLString:artwork[@"image_url"]];
return collectionViewCell;
}
else
{
GalleryCollectionViewCell *collectionViewCell = (GalleryCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"GalleryCollectionViewCell" forIndexPath:indexPath];
NSDictionary *artwork = [self.artworks objectAtIndex:indexPath.item];
[collectionViewCell loadImageWithURLString:artwork[@"image_url"]];
return collectionViewCell;
}
}
Я не уверен, почему мне нужно проверить вид коллекции, но он работает прямо сейчас. Каждая ячейка отображает правильное содержимое. Таким образом, в первом представлении коллекции нет дублированных проблем.
В дополнение можно добавить код, как я настройка изображения:
- (void)loadImageWithURLString:(NSString *)urlString
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
[self.theImageView setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"home_screen_logo"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
[self.theImageView setImage:image];
[self.indicator stopAnimating];
[self.indicator setHidden:YES];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
}];
}
Но я не знаю, почему мне нужно проверить вид сбора в обратный вызов, потому что на самом деле он делает то же самое, как для первого представления коллекции как для второго вида коллекции. Для загрузки изображения я использую функцию AFNetworking
.
Благодарим вас за ответ, я отключил autaolayout и классы размеров, и теперь все работает нормально. Я не знаю, как это влияет на него, но это вызывает много проблем в моем проекте, я имею в виду об авто макетах и размерах классов –