13

我设法找出了在 iOS 8 下自行调整集合视图单元大小的方法

我想将其作为附件视图的一部分。

我崩溃了......堆栈跟踪的有趣部分如下:

** 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
  ...

这看起来像一个苹果错误。为什么布局似乎返回一个空的布局属性?

4

1 回答 1

1

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

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

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

于 2015-02-28T16:07:30.250 回答