ios - layoutSubviews llamado dos veces al girar
rotation viewcontroller (1)
Tenía la misma pregunta. Encontré esta página útil para mí. ¿Esto es útil para ti?
EDITAR: Aquí está el resumen de la página (copiada):
- init no causa que se llame a layoutSubviews (duh)
- addSubview hace que se invoque a layoutSubviews sobre la vista que se agrega, la vista a la que se agrega (vista de destino) y todas las subvistas de la vista de destino.
- setFrame llama inteligentemente a layoutSubviews en la vista que tiene su marco establecido solo si el parámetro de tamaño del marco es diferente
- al desplazar un UIScrollView, se llama a layoutSubviews en scrollView, y es superview
- Al girar un dispositivo, solo se llama a layoutSubview en la vista principal (la vista primaria de ViewControllers que responde)
- removeFromSuperview - layoutSubviews solo se llama en superview (no se muestra en la tabla)
Cuando mi vista principal gira, quiero volver a organizar las vistas secundarias, por lo que en mi ViewController, anulo
willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
y establece los marcos de las subViews allí. Esto está muy bien, pero en las subViews también he anulado
layoutSubviews
para que se diseñen correctamente. Pero el problema es que ahora se llama dos veces, presumiblemente una vez cuando configuro el Marco en la orientación de OrientaciónAlimentaria y otra vez debido a la rotación. (Si no configuro el Marco, se llama una vez).
Seguramente es responsabilidad de ViewController diseñar los marcos así que esto parece una falla de diseño: ¿cuál es la solución para que layoutSubviews solo se llame una vez?