为什么在集合视图中使用带有自调整大小的headerReferenceSize会导致iOS 8崩溃?

fat*_*oku 13 layout uicollectionview ios8 xcode6-beta5

我设法找出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
  ...
Run Code Online (Sandbox Code Playgroud)

这看起来像一个Apple bug.为什么布局似乎返回空布局属性?

web*_*ets 1

到目前为止我最好的想法是基于这个存储库:https://github.com/algal/SelfSizingCellsDemo

在 ViewController.swift 的第 50 行,我们生成label.preferredMaxLayoutWidth = 320了一个单元格,该单元格填充整个屏幕并在有足够文本的情况下换行。这需要更改以适应您正在使用的任何尺寸的屏幕。然后,在每个部分之后,您需要添加足够的文本来填充该标签,就像第 20 行所做的那样let items = smallitems.componentsSeparatedByString(" ") + [onelongitem]

这种方法的问题是,除了文本之外,我还不知道如何在该单元格中放置不同的视图。不过,这可能足以满足您的情况。