我遇到了这个问题(UICollectionView inside of UITableViewCell - AutoLayout)
在尝试了几个可用于互联网的解决方案后,我来了@Pablo Romeu's answer我尝试了他的解决方案,现在我得到了一个带有collectionView单元格的TableView(它可以根据其中的内容动态改变其大小) ) 但是当我滚动浏览我的tableview时,它会因此错误而崩溃:
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
我的项目file
答案 0 :(得分:1)
你的问题留在这一行
return self.collectionView.collectionViewLayout.collectionViewContentSize()
我已经用
取代了return CGSizeMake(self.collectionView.collectionViewLayout.collectionViewContentSize().width, 300);
并且不要崩溃,但我确信这不是您想要的,所以也许您可以通过此提示更好地看到问题