当滚动浏览其中有一个CollectionView的TableView时崩溃

我有这个问题( UICollectionView里面的UITableViewCell – AutoLayout )

并尝试了几个解决scheme,这是在互联网上可用我带着这个@Pablo Romeu的答案我试着他的解决scheme,现在我有一个TableView与其中的collectionView单元格(它可以dynamic地改变其大小的内容),但是当滚动浏览我的表查看它碰到这个错误:

2016-06-13 22:05:51.546 WishMeluck[3507:425240] the behavior of the UICollectionViewFlowLayout is not defined because: 2016-06-13 22:05:51.546 WishMeluck[3507:425240] the item height must be less than the height of the UICollectionView minus the section insets top and bottom values, minus the content insets top and bottom values. 2016-06-13 22:05:51.546 WishMeluck[3507:425240] Please check the values return by the delegate. 2016-06-13 22:05:51.547 WishMeluck[3507:425240] The relevant UICollectionViewFlowLayout instance is <UICollectionViewFlowLayout: 0x7fb83c05de90>, and it is attached to <UICollectionView: 0x7fb83a0c7c00; frame = (0 82.5; 375 179); clipsToBounds = YES; autoresize = RM+BM; tag = 4; gestureRecognizers = <NSArray: 0x7fb83c05cf00>; layer = <CALayer: 0x7fb83c055fb0>; contentOffset: {0, 0}; contentSize: {539, 179}> collection view layout: <UICollectionViewFlowLayout: 0x7fb83c05de90>. 2016-06-13 22:05:51.547 WishMeluck[3507:425240] Make a symbolic breakpoint at UICollectionViewFlowLayoutBreakForInvalidSizes to catch this in the debugger. 2016-06-13 22:05:51.548 WishMeluck[3507:425240] the behavior of the UICollectionViewFlowLayout is not defined because: 2016-06-13 22:05:51.548 WishMeluck[3507:425240] the item height must be less than the height of the UICollectionView minus the section insets top and bottom values, minus the content insets top and bottom values. 2016-06-13 22:05:51.548 WishMeluck[3507:425240] Please check the values return by the delegate. 2016-06-13 22:05:51.548 WishMeluck[3507:425240] The relevant UICollectionViewFlowLayout instance is <UICollectionViewFlowLayout: 0x7fb83c05de90>, and it is attached to <UICollectionView: 0x7fb83a0c7c00; frame = (0 82.5; 375 179); clipsToBounds = YES; autoresize = RM+BM; tag = 4; gestureRecognizers = <NSArray: 0x7fb83c05cf00>; layer = <CALayer: 0x7fb83c055fb0>; contentOffset: {0, 0}; contentSize: {539, 179}> collection view layout: <UICollectionViewFlowLayout: 0x7fb83c05de90>. 2016-06-13 22:05:51.548 WishMeluck[3507:425240] Make a symbolic breakpoint at UICollectionViewFlowLayoutBreakForInvalidSizes to catch this in the debugger. (lldb) 

我无法弄清楚这个错误的原因,如果有人知道,请帮助我

将此代码添加到我的TableViewCell

  override func awakeFromNib() { super.awakeFromNib() // Initialization code // collectionViewContainer.frame = self.bounds; // collectionViewContainer.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] let flow: UICollectionViewFlowLayout = (self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout) // Configure the collectionView flow.minimumInteritemSpacing = 1 // This enables the magic of auto layout. // Setting estimatedItemSize different to CGSizeZero // on flow Layout enables auto layout for collectionView cells. // https://developer.apple.com/videos/play/wwdc2014-226/ flow.estimatedItemSize = CGSizeMake(1, 1) // Disable the scroll on your collection view // to avoid running into multiple scroll issues. self.collectionView.scrollEnabled = true } func bindWithModel(model: AnyObject) { // Do your stuff here to configure the tableViewCell // Tell the cell to redraw its contentView self.contentView.layoutIfNeeded() } // THIS IS THE MOST IMPORTANT METHOD // // This method tells the auto layout // You cannot calculate the collectionView content size in any other place, // because you run into race condition issues. // NOTE: Works for iOS 8 or later override func systemLayoutSizeFittingSize(targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize { // With autolayout enabled on collection view's cells we need to force a collection view relayout with the shown size (width) //self.collectionView.frame = CGRectMake(0, 0, targetSize.width, targetSize.height) self.collectionView.layoutIfNeeded() // If the cell's size has to be exactly the content // Size of the collection View, just return the // collectionViewLayout's collectionViewContentSize. return self.collectionView.collectionViewLayout.collectionViewContentSize() } 

这在我的CollectionViewCell中:

  class CollectionViewCell: UICollectionViewCell { @IBOutlet var imgView: UIImageView! override func awakeFromNib() { self.contentView.setNeedsLayout() } } 

这也在我的TableViewController:

  // Enable automatic row auto layout calculations self.tableView.rowHeight = UITableViewAutomaticDimension; // Set the estimatedRowHeight to a non-0 value to enable auto layout. self.tableView.estimatedRowHeight = 100 

我的项目文件

你的问题留在这条线

 return self.collectionView.collectionViewLayout.collectionViewContentSize() 

我已经取代了

 return CGSizeMake(self.collectionView.collectionViewLayout.collectionViewContentSize().width, 300); 

不要崩溃,但我相信,这不是你想要的,所以也许你可以看到这个提示更好的问题