Ячейка 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.

  • Каков наилучший способ отобразить переменное количество изображений в TableViewCell в файле xib?
  • UICollectionView с анимацией подпрыгивания
  • Как отобразить стандартную галочку на UICollectionViewCell?
  • SelectedBackgroundView из UICollectionViewCell отображается, когда он не должен быть
  • UIScrollView в качестве подзадачи UICollectionViewCell - переход к контролю
  • Как выбрать и выделить UICollectionView, например, UITableViewCell?
  • UICollection View Scroll отставание с SDWebImage
  • Создание UICollectionView с бесконечными ячейками прокрутки по вертикали
  • Ячейки UICollectionView располагаются горизонтально, а не вертикально, чтобы обмануть трамплин?
  • Использование UICollectionReusableView для группировки ячеек
  • Как увеличить изображение до полного представления при использовании в UICollectionView?
  • Interesting Posts

    Как получить идентификатор электронной почты пользователя, используя facebook sdk 4.7 в ios 9

    Время сборки слишком велико в Xcode 8.3 с быстрым 3 в определенном файле

    Различные данные для обмена поставщиками в UIActivityViewController

    Ошибка создания библиотеки webrtc для iOS

    Каков правильный способ, используя «init» или «didmove»?

    Получение push-уведомлений в фоновом режиме iOS

    Xamarin.UITests – тестирование на реальном устройстве – всплывающие окна разрешений приложений iOS

    UIView animateWithDuration завершение = YES, несмотря на отмену?

    Должен ли popViewController вызываться из родительского или дочернего ViewController?

    XCode: как изменить раскладку между пейзажным и портретным режимами

    Спектр рисования iOS FFT

    Конвертировать дату в формате MM / dd / yyyy в xcode?

    Добавление базовых данных в приложение iPhone с существующими (обычными) моделями

    Ширина линии CGContext

    Как устранить неполадку IOS UIWebView DOM Exception 18?

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