Swift 2: el comportamiento de UICollectionViewFlowLayout no está definido porque:

Estoy usando una UICollectionrView para mostrar videos. Todo funciona bien, salvo que recibo una advertencia que dice:

2015-10-30 14: 00: 39.893 testing [6451: 90574] el comportamiento de UICollectionViewFlowLayout no está definido porque:

2015-10-30 14: 00: 39.893 test [6451: 90574] el ancho del elemento debe ser menor que el ancho del UICollectionView less la sección inserta valores de izquierda y derecha, less el contenido inserta valores de izquierda y derecha.

2015-10-30 14: 00: 39.893 test [6451: 90574] La instancia relevante de UICollectionViewFlowLayout es, y está adjunta a; capa =; contentOffset: {0, 0}; contentSize: {320, 0}> layout de vista de colección:.

2015-10-30 14: 00: 39.894 testing [6451: 90574] Haga un punto de corte simbólico en UICollectionViewFlowLayoutBreakForInvalidSizes para capturar esto en el depurador.

Esta advertencia aparece justo cuando vuelvo a cargar los datos dentro de mi colecciónView.

He tratado de cambiar el ancho, pero la advertencia sigue ahí.

¿Qué estoy haciendo mal?

var UserVideosInfo = [[String]]() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadCollectionVideoView:", name: "ReloadCollectionVideoView", object: nil) } @objc func reloadCollectionVideoView(notification: NSNotification) { UserVideosInfo = NSUserDefaults.standardUserDefaults().objectForKey("UserVideosJSON") as! [[String]] print(UserVideosInfo) collectionView?.reloadData() } override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { if UserVideosInfo.count == 0 { return 0 }else{ return UserVideosInfo.count } } override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let videoCell = collectionView.dequeueReusableCellWithReuseIdentifier("VideoCell", forIndexPath: indexPath) as UICollectionViewCell let communityViewController = storyboard?.instantiateViewControllerWithIdentifier("community_id") videoCell.frame.size.width = (communityViewController?.view.frame.size.width)! videoCell.center.x = (communityViewController?.view.center.x)! return videoCell } 

Parece que uno de sus elementos supera el tamaño de su UICollectionView después de volver a cargar sus datos. He tenido esta advertencia en la rotation de paisaje a retrato, donde mis celdas de paisaje obviamente no cabrían dentro de un retrato UICollectionView.

Intente invalidar el layout actual antes de volver a cargar sus datos:

 self.collectionView.collectionViewLayout.invalidateLayout() 

Si eso no funciona, intente configurar el ancho de sus celdas a un tamaño específico (por ejemplo, 300) y trabaje desde allí. Puede encontrar que hay márgenes o bordes que toman espacio que no esperaba, y es por eso que sus elementos son más grandes que el ancho de su UICollectionView. Si ese es el caso, intente configurar self.collectionView.contentInset en UIEdgeInsetsZero

Todavía estoy investigando este error, " uicollectionviewflowlayout no está definido porque ". Y no puedo entender la solución, aún (¡te haré un error!), Pero sí acorté exactamente lo que está causando mi problema, el contenido se establece con valores incorrectos y causa el error:

contentOffset: {0, -64};

Estoy usando AKPickerView-Swift , lo convertí a Swift 3. Solo obtengo el error al incrustar UIView, que contiene el AKPickerView, en un controller de navigation (UINavigationController) en el guión gráfico.

Por lo tanto, la solución temporal simple y solo una solución, no incruste la UIView en un controller de navigation. 🙂 Volveré más tarde y corrijo esto correctamente y descubro por qué UICollectionViewFlowLayout está siendo disparado para el controller de navigation y no para el UIViewController.

Si alguien tiene time libre para resolverlo antes de hacerlo, gracias de antemano y es muy apreciado.

Acabo de recibir este error después de purgar todas las comstackciones y rebuild el proyecto. Había hecho varios otros cambios y antes de esto todo funcionaba "correctamente", o al less parecía ser (quizás debido a que la vista se almacenó en caching de alguna manera, no estoy seguro).

De todos modos, también tenía contentOffset: {0, -64}, así que revisé las restricciones y encontré que mis restricciones estaban establecidas en la supervisión (controller de navigation) y no en la vista. Quité las restricciones a la supervisión y las volví a agregar, esta vez a la vista. Ahora, contentOffset es {0, 0} y el error desaparece.

 override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let videoCell = collectionView.dequeueReusableCellWithReuseIdentifier("VideoCell", forIndexPath: indexPath) as UICollectionViewCell (........) } 

¿Se ve su colección de nombres de UICollectionView outlet como si especificara aquí?

Si está utilizando una "UICollectionView" en el guión gráfico, entonces el nombre de salida especificado para eso en la class debería usarse aquí. Ejemplo:

deje videoCell = myCollectionViewOutletName .dequeueReusableCellWithReuseIdentifier ("VideoCell", forIndexPath: indexPath) como MyCollectionViewCellClassName