Compañeros de desarrollo, estoy teniendo problemas con AutoLayout en Interface Builder (Xcode 5 / iOS 7). Es muy básico e importante, así que creo que todos deberían saber cómo funciona esto correctamente. Si esto es un error en Xcode, ¡es crítico!
Entonces, cada vez que tengo una jerarquía de vistas como esta me encuentro con problemas:
>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)
El UIScrollView tiene restricciones sólidas, por ejemplo, 50 px de cada lado (no hay problema). Luego agrego una restricción de espacio superior al UILabel (no hay problema) (e incluso puedo fijar el alto / ancho de la etiqueta, no cambia nada, pero debería ser innecesario debido al tamaño intrínseco de la etiqueta)
El problema comienza cuando agrego una restricción final a UILabel:
Por ejemplo, espacio final a: Supervisión igual: 25
Ahora ocurren dos advertencias, y no entiendo por qué:
A) Ambigüedad de tamaño de contenido desplazable (la vista de desplazamiento tiene altura / anchura de contenido desplazable ambiguo)
B) Vistas fuera de lugar (Etiqueta esperada: x = -67 Real: x = 207
Hice este ejemplo mínimo en un proyecto nuevo que puedes descargar y adjunté una captura de pantalla. Como puede ver, Interface Builder espera que la etiqueta se asiente fuera del límite de UIScrollView (el rectángulo punteado naranja). La actualización del marco de la etiqueta con la herramienta Resolver problemas lo mueve allí mismo.
Tenga en cuenta: si reemplaza el UIScrollView con un UIView, el comportamiento es el esperado (el marco de la etiqueta es correcto y de acuerdo con la restricción). Parece que hay un problema con UIScrollView o me estoy perdiendo algo importante.
Cuando ejecuto la aplicación sin actualizar el marco de la etiqueta como lo sugiere IB, está bien ubicado, exactamente donde se supone que debe estar y el UIScrollView es desplazable. Si actualizo el marco, la etiqueta está fuera de la vista y el UIScrollView no se desplaza.
¡Ayúdame, Obi-Wan Kenobi! ¿Por qué el diseño ambiguo? ¿Por qué la vista fuera de lugar?
Puede descargar el proyecto de muestra aquí y probar si puede descubrir qué está pasando: https://github.com/Wirsing84/AutoLayoutProblem
UIScrollView
directamente. En lugar de usar UICollectionView
o UITableView
tanto como sea posible, ¡casi todo es posible con estos elementos y también brinda simplicidad, legibilidad y reutilización!