UICollectionView добавление изображения в ячейку

Я работаю над проектом, который использует UICollectionView для отображения данных, которые могут иметь или не иметь изображение.

Способ, которым я использую, – проверить, не является ли URL-адрес изображения нулевым, а затем добавить ImageView в ячейку.

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { if (question.picture != (id)[NSNull null]) { //add AsyncImageView to cell imageView.contentMode = UIViewContentModeScaleAspectFill; imageView.clipsToBounds = YES; imageView.tag = IMAGE_VIEW_TAG; [cell addSubview:imageView]; [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:imageView]; imageView.imageURL = [NSURL URLWithString:question.picture]; } } 

Для тех ячеек, у которых нет изображения, ячейка должна выглядеть так: https://dl.dropboxusercontent.com/u/5753236/Stackoverflow/good.png

Тем не менее, некоторые из них по-прежнему будут добавлять ImageView с обрезанным изображением на нем, вызывая что-то вроде этого: https://dl.dropboxusercontent.com/u/5753236/Stackoverflow/bad.png

Я попытался использовать SDWebImage, но все еще не решил проблему.

Другая проблема заключается в том, что когда я UICollectionView , я вижу некоторые изображения, отображаемые в качестве изображения, показанного выше, а затем меняю его на правильное изображение после завершения загрузки, и я просто не знаю, что вызывает проблему.

Пожалуйста, помогите мне разобраться в этих двух проблемах, я бы очень признателен за любую помощь.

One Solution collect form web for “UICollectionView добавление изображения в ячейку”

Прежде всего, способ добавления изображений в вашу ячейку довольно опасен. Причина в том, что ваши ячейки повторно используются (например, при прокрутке или при перезагрузке данных), и эти изображения никогда не удаляются при повторном использовании. Таким образом, вы начнете использовать их повсюду, и вы даже можете дойти до точки, где ваша ячейка содержит несколько вхождений изображения. Вот два способа сделать это:

  • Первый способ (хороший способ): вы подклассифицируете свой UICollectionViewCell и придаете подклассу свойство «imageView». Затем вы делаете это в своем файле CustomCollectionViewCell.m:

     // Lazy loading of the imageView - (UIImageView *) imageView { if (!_imageView) { _imageView = [[UIImageView alloc] initWithFrame:self.contentView.bounds]; [self.contentView addSubview:_imageView]; } return _imageView; } // Here we remove all the custom stuff that we added to our subclassed cell -(void)prepareForReuse { [super prepareForReuse]; [self.imageView removeFromSuperview]; self.imageView = nil; } 

    Затем в вашем ViewController вам необходимо объявить новый класс вашей коллекцииViewCells следующим образом:

     [self.collectionView registerClass:[CustomCollectionViewCell class] forCellWithReuseIdentifier:@"cell"]; 

    Это гарантирует, что изображения будут правильно удалены при повторном использовании, а также упростить настройку ячейки в делегате коллекцииView.

  • Второй способ (грязный путь), вы удаляете представления каждый раз, когда вы загружаете новую ячейку:

     - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { for (UIView *subview in [cell.contentView subviews]) { [subview removeFromSuperview]; } if (question.picture != (id)[NSNull null]) { //add AsyncImageView to cell imageView.contentMode = UIViewContentModeScaleAspectFill; imageView.clipsToBounds = YES; imageView.tag = IMAGE_VIEW_TAG; [cell.contentView addSubview:imageView]; [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:imageView]; imageView.imageURL = [NSURL URLWithString:question.picture]; } } 

    Этот путь намного проще, но я бы не рекомендовал его: P

Теперь попробуйте это и дайте мне знать, как развивается ваша ошибка.

  • встроить живую камеру в UIView
  • Автоматически устанавливать центр uibutton - SWIFT
  • Представление «прыгает», когда я добавляю его в UIWindow как subview (через свойство rootViewController) и делаю флип
  • Отключить весь UIView
  • Как изменить / изменить цвет UINavigationBar?
  • Можно ли создать UIView в фоновом потоке?
  • Разрешение пользовательского взаимодействия для ЧАСТИ UIView во время анимации
  • Чистый способ принудительного просмотра представлений
  • CAayer - (void) drawInContext: (CGContextRef) ctx никогда не вызывается
  • Добавить функциональность в стандартное распознавание жгута жесткости в UIScrollView
  • Как выполнить «90% слайд» между двумя UIViews
  • Interesting Posts

    Библиотека ZXing на раскадровке

    navigationController нажал ViewControllers не будет авторотировать

    Magento oauth api для SDK для iOS

    Как определить, что точка находится внутри многоугольника, используя SDK Google Maps для iOS?

    разъяснение декларации свойств iOS

    Подавлять большеNavigationController в пользовательском UITabBarController

    удаление белого градиента от UISegmentedControl

    Анимированный переход на TabBarController? .selectedIndex изменить? (Swift)

    Панорамный и косвенный распознаватель жестов для одного и того же вида, который должен быть неудачным для другого?

    цель-C как объявить частную собственность для категории?

    Сделайте приложение iOS совместимым с iPhone6 ​​и iPhone6 ​​+ размерами

    sqlcipher framework не найден при интеграции Crashlytics в приложении Worklight

    Изменение атрибутов UIView через Interface Builder

    Внедрить бесплатный пробный период в iOS

    Google Analytics iOS SDK V0.2 Бета Отмененный таймер с интервалом

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.