¿Por qué se invoca el método systemLayoutSizeFittingSize en cada UICollectionViewCell incluso si las celdas tienen un tamaño fijo?

He realizado una vista de colección con un layout de flujo que se desplaza horizontalmente. Las celdas deben tener un ancho fijo y deben llenar la vista de colección verticalmente. Así que he configurado este tamaño fijo usando la propiedad de disposition de flujo, el elemento itemSize en viewDidLayoutSubviews de mi controller.

 myCollectionViewFlow.itemSize = CGSizeMake(MyCollectionViewColumnWidth, myCollectionView.frame.size.height); 

No le doy un tamaño de artículo estimado al layout, así que, de acuerdo con la documentation de Apple sobre la propiedad estimatedItemSize de UICollectionViewFlowLayout , no espero que la vista de colección consulte el tamaño de cada celda utilizando el método prefernetworkingLayoutAttributesFittingAttributes: la celda.

El valor pnetworkingeterminado de esta propiedad es CGSizeZero. Al configurarlo a cualquier otro valor, la vista de colección consulta cada celda por su tamaño real utilizando el método prefernetworkingLayoutAttributesFittingAttributes: cell. Si todas sus celdas tienen la misma altura, use la propiedad itemSize, en lugar de esta propiedad, para especificar el tamaño de celda en su lugar.

Sin embargo, al analizar el tree de llamadas usando el perfilador de time en el simulador de iOS 9, he observado que el método prefernetworkingLayoutAttributesFittingAttributes: se invoca en cada celda. La implementación pnetworkingeterminada de este método parece calcular el layout de la subvista de acuerdo con las restricciones. Como mis células son complejas, esto requiere mucho time, por lo que esto evita get un desplazamiento suave.

He corregido el problema de performance anulando el método prefernetworkingLayoutAttributesFittingAttributes: y devolviendo el tamaño de destino (ya que mis celdas tienen un tamaño fijo).

 - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority { return targetSize; } 

Pero no puedo entender por qué necesito hacer este truco con la configuration que configuré. Y también tengo miedo de provocar un comportamiento inesperado al subclasificar este método.

EDITAR

El método prefernetworkingLayoutAttributesFittingAttributes: no se llama en el simulador de iOS 10 ni en el dispositivo iOS 10. Desafortunadamente, no tengo un dispositivo con iOS 9 para probar, así que no puedo determinar si es solo un error del simulador.