Ячейка UICollectionView исчезает

Что происходит

В настоящее время у меня есть приложение, которое использует два UICollectionViews внутри UITableView . Таким образом, я создаю Pulse News как приложение. Моя проблема заключается в том, что иногда 6-я и 11-я строки полностью исчезают, оставляя пустое место, где должна быть ячейка. На самом деле я бы не возражал, если бы все ячейки были такими (и таким образом я мог предположить, что я делал что-то не так), но дело в том, что это происходит только с этими конкретными.

Моя теория

6-я и 11-я строки – это те, которые появляются при запуске прокрутки, поэтому по умолчанию я могу видеть 5 ячеек, и когда я делаю первую горизонтальную прокрутку, появляется 6-е (иногда пустое пространство).

Что у меня есть

Единственное, что я делаю сейчас:

  [self.collectionView registerNib:[UINib nibWithNibName:CELL_NIB_NAME bundle:nil] forCellWithReuseIdentifier:CELL_IDENTIFIER]; 

На viewDidLoad . И о создании ячейки:

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CELL_IDENTIFIER forIndexPath:indexPath]; NSMutableDictionary *dictionary = [self.DataSource objectAtIndex:[indexPath row]]; [cell buildViewWithDictionary:dictionary withReferenceParent:self.referenceViewController]; return cell; } 

Так что я не понимаю, что здесь происходит. Я, однако, что-то не так в источнике данных (фиктивный JSON-файл), но иногда он работает нормально, и камера показывает, поэтому я думаю, что из этой части все в порядке.

Итак, мой «вопрос»: Кто-нибудь знает, что происходит? Я не очень хочу сказать, что это ошибка от iOS, но я ничего не могу придумать.


Изменить 1.0

Удивительная часть заключается в том, что этот метод

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

indexPath от indexPath [0,4] до [0,6] без вычисления [0,5]. В первый раз я действительно вижу, что это происходит в iOS.


Изменить 2.0

Я переключил способ создания ячеек, и вместо того, чтобы использовать dequeuing, я использую старый способ:

 NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CELL_NIB_NAME owner:self options:nil]; MyCell *cell = (MyCell *)[nib objectAtIndex:0]; 

Все тот же печальный результат.

Итак, что работало?

1) Подкласс UICollectionViewFlowLayout .

2) Установите flowLayout моего UICollectionView в мой новый подкласс.

3) В методе init подкласса UICollectionViewFlowLayout ориентацию:

 self.scrollDirection = UICollectionViewScrollDirectionHorizontal; 

В моем случае это горизонтально.

4) Важная часть :

 -(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds { return YES; } 

В этот момент я должен немного теоретизировать, но, честно говоря, я понятия не имею.

Вышеуказанные ответы не сработали для меня, но после загрузки изображений я заменил код [self.myCollectionView reloadData] на [self.myCollectionView reloadSections:[NSIndexSet indexSetWithIndex:0]]; для обновления коллекции, и она показывает все ячейки, вы можете попробовать.

Ни одно из решений, предоставленных кем-либо, не помогло мне в моем настраиваемом макете, который нам нужно иметь в нашем приложении. Вместо этого я должен был это сделать: (И да, ЭТО РАБОТАЕТ !!!)

 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{ CGSize size = [self collectionViewContentSize]; rect.size.height = size.height*2; NSArray *atrributes_Super = [super layoutAttributesForElementsInRect:rect]; return atrributes_Super; } 

В конце концов, UICollectionView просто ищет атрибуты для элементов, которые будут отображаться в прямоугольнике экрана.

Мне подсказывал подсказку Роба об ошибке. Ошибка указывает, что если вставки вставки и ширина и интервал ячеек складываются точно в ширину экрана, тогда первый столбец иногда случайно исчезает и снова появляется для некоторых ячеек в некоторых местах. Вместо подкласса или изменения ширины ячеек, я изменил вставки разделов слева и справа в моей раскадровке с 6 по 4, и я больше не видел эту проблему.

В моем случае (вертикальный свиток с исчезновением клеток в первом представлении) клетки исчезали из-за неправильного расчетного размера. Кажется, UICollectionView использует расчетный размер для вычисления элементов для загрузки в первом представлении. Я бы установил оценочный размер слишком высоким, что привело к неправильным вычислениям для количества элементов для загрузки на первом экране.

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

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

в моем наблюдателе, чтобы ответить на KeyboardWillShow у меня было следующее:

 var userInfo = obj.UserInfo[UIKeyboard.FrameEndUserInfoKey]; if (userInfo is NSValue value) { var rect = value.CGRectValue; var windowOffset = this.Superview.ConvertPointToView(this.Frame.Location, UIApplication.SharedApplication.KeyWindow); var newHeight = rect.Y - windowOffset.Y; this._controller.CollectionView.Frame = new CGRect(0, 0, this._controller.CollectionView.Frame.Width, newHeight); } 

После его изменения:

 var userInfo = obj.UserInfo[UIKeyboard.FrameBeginUserInfoKey]; if (userInfo is NSValue value) { var rect = value.CGRectValue; UIEdgeInsets contentInsets = new UIEdgeInsets(0, 0, rect.Height, 0); this._controller.CollectionView.ContentInset = contentInsets; this._controller.CollectionView.ScrollIndicatorInsets = contentInsets; } 

Проблема исчезновения клеток полностью исчезла. Это C # от работы с xamarin, но я надеюсь, что это поможет кому-то другому.

Я думаю, что это не ошибка UICollectionView, возможно, ваши данные не возвращают правильные данные в - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect .

Вы можете увидеть эту демонстрацию: https://github.com/lqcjdx/YLTagsChooser , все ячейки могут отображаться при совпадении UICollectionView.

  • как получить indexPath для ячейки, которая расположена в центре UICollectionView
  • UICollectionView добавление изображения в ячейку
  • Вызов to didHighlightItemAtIndexPath без вызова didSelectItemAtIndexPath для UICollectionView
  • Как сделать динамическую высоту ячейки UICollectionview?
  • UICollectionView moveItemAtIndexPath: toIndexPath: проблемы перемещения элементов не на экране
  • UILabel с дескриптором жесты Tap не работает
  • Как создать пользовательский UICollectionViewCell и добавить изображение из URL-адреса на него?
  • UICollectionView - упорядочить ячейки по горизонтали
  • iOS: автоматический размер UICollectionViewCell в зависимости от размера экрана
  • UICollectionView в UICollectionViewCell (Swift)
  • Использование настраиваемого макета Причиняет функцию displayViewFlowLayout делегата, не вызываемую
  • Interesting Posts

    Непрерывная интеграция Xcode Server после запуска $ XCS_PRODUCT не установлен

    Горизонтальный UICollectionView однострочный макет

    Как сканировать несколько регионов, используя startMonitoringForRegion в Objective-C

    Как я могу использовать Core Graphics для рисования круга в моем месте касания?

    UIEvents, отправленные с Apple TV при использовании внешнего режима воспроизведения AVPlayer

    Навигационная панель Заголовок фона белый в iOS11

    Повторное использование ячеек UICollectionView – некоторые ячейки не выбраны

    Как отключить клавиатуру при использовании UITextField?

    Обнаружение и перехват воспроизведения видео в UIWebView

    Объект Objective-C ++ для импорта C ++ не работает, cassert не найден

    фиксированная ориентация не работает на ipad ios 8 swift xcode 6.2

    Как получить версию iOS с помощью Google Analytics

    AFNetworking – формат запроса неверен при использовании словарей

    Отправка 'MKOverlayView в параметр несовместимого типа' id <MKOverlay> '

    UIWebView с динамической высотой приводит к сбою памяти

    Давайте будем гением компьютера.