0

i was having this issue (UICollectionView inside of UITableViewCell - AutoLayout)

and after trying several solution which are available in the internet i came with this @Pablo Romeu's answer i tried his solution , now i got a TableView with collectionView cells in it (which can dynamically change its size according to content in it) but when am scrolling through my tableview its getting crashed with this error :

    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) 

am not able to figure out the cause of this error if any body knows then please help me out

added this codes to my 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()
    }

and this in my CollectionViewCell:

    class CollectionViewCell: UICollectionViewCell {

    @IBOutlet var imgView: UIImageView!


    override func awakeFromNib() {

        self.contentView.setNeedsLayout()
    }


}

also this in my 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

my project file

Community
  • 1
  • 1
remy boys
  • 2,675
  • 5
  • 28
  • 57

1 Answers1

1

your problem stay at this line

return self.collectionView.collectionViewLayout.collectionViewContentSize()

I had replaced with

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

and don't crash but I am sure that this is not that you want so maybe you can see the problem better with this hint

Reinier Melian
  • 18,995
  • 3
  • 32
  • 51