Device Rotation: The behavior of the UICollectionViewFlowLayout is not defined

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Device Rotation: The behavior of the UICollectionViewFlowLayout is not defined

    iOS will mich mal wieder ärgern...

    Ich habe eine CollectionView, welche teils Zellen mit der ganzen Screen-Breite hat.
    Rotiere ich nun von Landscape zu Portrait, meckert es in der Console:
    the behavior of the UICollectionViewFlowLayout is not defined because:
    the item width must be less than the width of the UICollectionView minus the section insets left and right values, minus the content insets left and right values.
    Bei der Drehung von Portrait zu Landscape gibt es keine Logausgaben.
    Ich habe jetzt mal testweise einfach eine feste cellSize für alle Cells in der DataSource hinterlegt:

    Quellcode

    1. func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    2. return CGSize(width: view.bounds.size.width, height: 150.0)
    3. }
    Zusätzlich lass ich das Layout neu berechnen bei der Rotation

    Quellcode

    1. override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    2. super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
    3. coordinator.animateAlongsideTransition({ (context) -> Void in
    4. self.collectionViewLayout.invalidateLayout()
    5. }) { (context) -> Void in
    6. }
    7. }

    Der Witz an der Sache ist, dass ich sehe wie sich das Layout richtig animiert während der Drehung.
    Ich habe Labels in den Cells, welche per horizontalen Center-Constraints in der Mitte gehalten werden.

    Das passt sowohl vor als auch nach der Drehung und die Cell-Breite verändert sich während der Animation.
    Die Cellbreite stimmt laut print-Konsolenausgaben auch vor und nach der Drehung.

    Es scheint also einfach die Zelle während der Animation zu spät verkleinert zu werden,
    so dass das System sich zu der Ausgabe genötigt sieht.

    Was kann man noch falsch machen, bzw. wie bekomme ich diese Meldungen in den Griff?