¿Mejor práctica para modificar las restricciones de diseño automático del guión gráfico en el código?

StackOverflow https://stackoverflow.com//questions/21008444

  •  21-12-2019
  •  | 
  •  

Pregunta

Siempre he hecho mi UIS en Código, pero he decidido que debería usar los guiones gráficos y el diseño automático para un proyecto actual. Todo había estado yendo bien hasta que construí una escena compleja con aproximadamente 50 vistas con mucha jerarquía y una pareja de vistas.

El problema es que mi diseño automático se está confundiendo en algunos dispositivos y orientaciones. Me parece que es difícil usar IB para intentar arreglar las docenas (cientos?) De restricciones o para rastrear los problemas y resolverlos. La situación es tal que no estoy recibiendo errores o advertencias, solo algunos diseños desagradables a veces. Y IB puede ser un dolor con todas las configuraciones de clic y cambio que necesita hacer para rastrear la información de restricción, y mucho menos obtener una idea completa de cómo se relacionan todos en una escena.

Acabo de pasar un día leyendo documentos y material de fondo en la distribución automática y las restricciones y parece que mi mejor solución es usar el formato visual para especificar restricciones en el código y crear algún código personalizado para ayudar. Sin embargo, parece que no puedo encontrar nada sobre cómo hacer la transición de IB a código.

Específicamente, ¿debo borrar todas las restricciones de IB y hacerlas a mano a mano o es posible ser selectivo? Pido porque tengo algunos grupos de vistas al contener vistas donde las vistas de contenido tienen un diseño perfecto.

En segundo lugar, ¿dónde mejor pongo mi código? Quiero convivir los guiones gráficos y solo quiero modificar selectivamente algunas escenas complejas. ¿Es ViewWillApage de View Controller: el lugar correcto para modificar o eliminar / agregar restricciones para ver los controles?

¿Fue útil?

Solución 2

Lamento tomar tanto tiempo para volver a esto, mientras que otros proyectos se introdujeron.

Tuve que hacer mucha refactorización para simplificar mis escenas para que el diseño automático pudiera hacer lo correcto, y sin embargo, no estoy totalmente satisfecho con los resultados. El problema parece ser que IB simplemente no es fácil de usar con muchos artículos, y ese diseño automático es complicado, por necesidad.

con lo dicho, los mejores resultados que he visto hasta ahora se extraen de este artículo por Justin Driscoll: http://themainthread.com/blog/2014/02/building-a-universal-app.html

Aboga por la construcción de puntos de vista personalizados para encapsular componentes de UI reutilizables. He tomado este enfoque, pero he extendido la idea de ampliar también los componentes relacionados que no van a diseñar de manera muy diferente a medida que cambia el diseño. Por ejemplo, tengo una barra de progreso con botón y dos etiquetas, por lo que aunque no los estoy reutilizando como grupo, deben ser adyacentes y conceptualmente están relacionados, por lo que he hecho una vista personalizada para ellos que maneja el auto Diseño como sugiere Justin.

Ahora estoy tomando el enfoque que cada nivel de diseño automático solo debe tener un puñado de elementos. Si un nivel se vuelve demasiado complejo, acariciaré algunos artículos relacionados en una vista personalizada y empujaré un poco de diseño automático dentro de esa nueva vista. Hasta ahora no es tan malo.

Otros consejos

Conecte un IBOUTELT para el NSLAYOUTCONSTRAINT que desea modificar en el archivo Storyboard / Xib a su controlador / vista.

Una vez que tiene el objeto de diseño conectado, puede modificar la propiedad. CONCANTANTE y animar la vista:

[self.containerView layoutIfNeeded]; //make sure all layout operations are done
self.containerViewBottomLayoutConstraint.constant = 200.0; //change the layout
[UIView animateWithDuration:duration animations:^{
    [self.containerView layoutIfNeeded]; //animate the changes
}];

Actualizado: puede agregar su código de modificación en ViewDidload, DespandeseFromnib, ViewDidAppear, o basado en eventos.Realmente depende de tus intenciones.

Diseño automático puede ser realmente complicado cuando se usa muchas vistas.He usado estructuras de vistas de forma similar, y encuentro que es mejor tratar de mantener todas las restricciones en el código o en IB.En este momento los estamos guardando en IB.La única vez que trasladamos una restricción al código es cuando estamos respaldando un tamaño de pantalla diferente, y necesitamos modificar una sola restricción para la vista para trabajar a la derecha.Siempre he modificado las restricciones en ViewDidload.

Cuando algo se ensucia, casi siempre tengo que nuke todas las restricciones en esa vista y comenzar.Apesta, pero a menudo es más rápido que seguir el problema.Una cosa que hacemos lo que hace que sea más fácil tratar con ese tipo de cosas que debe usar .xibs junto con su guión gráfico.De esa manera, cada vista puede manejar su propio diseño, y puede sacarlo en una vista que está sentado en un guión gráfico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top