【发布时间】:2016-06-13 16:49:46
【问题描述】:
我遇到了这个问题 (UICollectionView inside of UITableViewCell - AutoLayout)
在尝试了几种互联网上可用的解决方案后,我使用了这个@Pablo Romeu's answer 我尝试了他的解决方案,现在我得到了一个带有 collectionView 单元格的 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
【问题讨论】:
标签: ios uitableview swift2 uicollectionview