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

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

7 Solutions collect form web for “Ячейка UICollectionView исчезает”

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

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.

  • этот сертификат был подписан неизвестным органом
  • Копировать динамически созданный файл в встроенный пакет приложений
  • iOS - JSQMessagesViewController. Высота Bubble Chat не регулируется (текст отключается)
  • Невозможно получить доступ к свойству UIColor UIView из UIViewController
  • OCLint не в системном пути
  • Можно ли включить стандартную библиотеку c ++ в файл .metal?
  • Является ли значение XCode Build (CFBundleVersion) когда-либо рассматриваемым как число?
  • Xcode Множественные статические библиотеки и повторяющиеся символы
  • Ваш сертификат iOS Development был отозван
  • Приложение iOS «Приложение не может быть проверено»
  • CFBundleVersion должен быть выше, чем предыдущая версия
  • Interesting Posts

    Обработчик завершения UIActivityViewController по-прежнему вызывает действие, даже если пользователь нажимает на отмену

    iOS 11 Ориентация устройства Авторотация

    Как преобразовать NSData в NSString?

    Сессия аудио: использование режима измерения вызывает низкий уровень громкости / отсутствие звука в iOS 7.1

    Моему приложению отказали из-за непубличных API

    Как очистить кеш шрифтов, заполненный символами emoji?

    как связать статическую библиотеку для iOS

    Получить координаты X и Y слова в UITextView

    Sdk для получения токена авторизации для публикации на facebook / twitter / связанном, а затем опубликовать с помощью nodejs

    Как отображать NSData с содержимым PDF в iOS UIWebView?

    Кордова пытается набрать номер телефона

    Исправление запросов UISearchControllerSearchResults

    Ошибка в Swift: свойство self.circle1 не инициализировано при вызове super.init?

    Загрузка изображений с веб-сервера для отображения сетчатки iOS

    Невозможно добавить событие в календарь

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