Подтвердить что ты не робот

Почему использование headerReferenceSize с ячейками самонастройки в представлении коллекции вызывает сбои в iOS 8?

Мне удалось выяснить подход к ячейкам просмотра размера для самостоятельного выбора размера в iOS 8.

Я хочу сделать это как часть дополнительного вида.

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

** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
*** First throw call stack:
(
  0   CoreFoundation    __exceptionPreprocess + 165
  1   libobjc.A.dylib   objc_exception_throw + 45
  2   CoreFoundation    -[__NSArrayM insertObject:atIndex:] + 954
  3   UIKit             -[UICollectionViewFlowLayout layoutAttributesForElementsInRect:] + 384
  4   UIKit             __45-[UICollectionViewData validateLayoutInRect:]_block_invoke + 144
  5   UIKit             -[UICollectionViewData validateLayoutInRect:] + 1396
  6   UIKit             -[UICollectionView layoutSubviews] + 170
  7   UIKit             -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 521
  8   QuartzCore        -[CALayer layoutSublayers] + 150
  9   QuartzCore        _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
  10  UIKit             -[UIView(Hierarchy) layoutBelowIfNeeded] + 611
  11  UIKit             -[UIInputSetHostView layoutIfNeeded] + 105
  12  UIKit             __43-[UIInputWindowController setInputViewSet:]_block_invoke + 112
  13  UIKit             +[UIView(Animation) performWithoutAnimation:] + 65
  14  UIKit             -[UIInputWindowController setInputViewSet:] + 291
  15  UIKit             -[UIInputWindowController performOperations:withAnimationStyle:] + 50
  16  UIKit             -[UIPeripheralHost(UIKitInternal) setInputViews:animationStyle:] + 1054
  17  UIKit             -[UIResponder becomeFirstResponder] + 468
  18  UIKit             -[UIView(Hierarchy) becomeFirstResponder] + 99
  19  UIKit             -[UITextView becomeFirstResponder] + 75
  ...

Это выглядит как ошибка Apple. Почему макет, похоже, возвращает пустой атрибут макета?

4b9b3361

Ответ 1

Лучшая идея, которую я имею до сих пор, основана на этом репозитории: https://github.com/algal/SelfSizingCellsDemo

В строке 50 ViewController.swift есть label.preferredMaxLayoutWidth = 320, который создает ячейку, заполняющую весь экран, и обертывает строки, если текста достаточно. Это нужно изменить, чтобы соответствовать любому экрану размера, с которым вы работаете. Затем после каждого раздела вам нужно будет добавить достаточно текста для заполнения этого ярлыка, как это делается в строке 20 let items = smallitems.componentsSeparatedByString(" ") + [onelongitem]

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