He pasado dos días probando las diversas soluciones para los enfoques de Autolayout mixto y puro para lograr lo que era una configuración trivial de vista de desplazamiento antes del autolayout, y ahora es oficial: debo ser demasiado estúpido. Estoy configurando esto principalmente en Storyboard (bueno, así es como es).
Así que aquí está mi petición de ayuda.
Viewtree:
UIView
-UIView
-UIView
..-UIScrollview
...-UIButton
...-UIButton
...-UIButton
Se supone que los botones se desplazan horizontalmente (de izquierda a derecha y viceversa). ¿Alguien puede decirme cómo establecer las restricciones para lograr esto usando Autolayout puro?
-
He intentado el enfoque mixto, así:
UIView
- UIView
- UIView
..-UIScrollview
...-UIView (contentview)
....-UIButton
....-UIButton
....-UIButton
... y establecer restricciones de ancho y alto fijas para contentview
la translatesAutoresizingMaskIntoConstraints
configuración y según la nota técnica de Apple. Los botones y la vista de desplazamiento se configuran mediante restricciones. Esto hace que el scrollview se desplace (sí) pero, por desgracia, ¡se desplaza demasiado! Por lo que puedo decir, el ancho de desplazamiento se duplica de alguna manera de lo que configuré la vista de contenido en ??? !!! ???
También probé el enfoque de autolayout puro, con contentview
y sin. Todas las vistas son translatesAutoresizingMaskIntoConstraints=NO
, excepto self.view
. Los botones tienen restricciones de ancho / alto fijas y están anclados a los cuatro bordes de la vista de desplazamiento. Nada se desplaza.
Así que estoy totalmente desconcertado por qué no puedo hacer que funcione correctamente. Cualquier ayuda es muy apreciada, y si necesita cualquier otra información, ¡pregunte!
Captura de pantalla ACTUALIZADA con solución - restricciones buttonZ:
EDITAR @ Jamie Forrest Entonces, la solución resulta ser la restricción de seguimiento incorrecta en el último botón. En lugar de 6441, el valor que había establecido era negativo, -6441. Lo complicado es que, al establecer el valor en el guión gráfico, hay dos opciones en la barra de herramientas Pin:
El valor actual del lienzo es negativo (lo que lleva a que no haya desplazamiento), y la opción a continuación es positiva (activación del desplazamiento). Esto significa que no soy estúpido, pero al menos medio ciego, supongo. Aunque, en mi defensa, ¿no es algo inquietante que XCode no muestre un error para la configuración "incorrecta"?
EDITADO DE NUEVO Ahora esto es divertido ... cambiando el valor final de -6441 (sin desplazamiento) a 6441 desplazamiento habilitado. ¡Pero mi viejo amigo, el "demasiado contenido" estaba de regreso, lo que condujo a un tamaño de contenido dos veces más grande de lo que debería ser! ¡La solución para obtener el desplazamiento de contenido correcto fue establecer la restricción final a CERO! Esto no es obvio cuando se trabaja en Storyboard, pero al mirar el código de @Infinity James, es lo que debería ser.
contentSize
de un UIScrollView
diseño automático. Y es lo contentSize
que define cuánto puede desplazarse. Por lo tanto, tendrá que configurar esto manualmente en algún lugar eventualmente. Por lo demás, puede usar restricciones de diseño para configurar marcos de vista uno con respecto al otro.