Tengo una vista que necesita manipular su marco mediante programación: es una especie de vista de documento que se ajusta a su contenido, que luego se desplaza y hace zoom alrededor de una supervista manipulando el origen del marco. Autolayout lucha con esto en tiempo de ejecución.
Deshabilitar el diseño automático por completo parece un poco duro porque podría usarse razonablemente para manejar el diseño de las otras vistas. Parece que lo que podría querer es algún tipo de "restricción nula".
fuente
Tuve un problema similar en el que Autolayout anulaba parte de la configuración de mi marco en el tiempo de ejecución (tenía una vista dinámica que en algunos casos empujaba un nuevo controlador de vista ... presionar y luego presionar Atrás restablecía la vista inicial).
Lo solucioné colocando mi código de manipulación en
viewDidLayoutSubviews
mi View Controller. Esto parece ser llamado después de cualquier restricción que se llame a mojo, pero antes de viewDidAppear, por lo que el usuario no se da cuenta.fuente
Quizás solo establecer
translatesAutoresizingMaskIntoConstraints
enYES
(y no agregar restricciones adicionales que afecten esa vista) le permitirá configurar el marco sin luchar contra el sistema de diseño automático.fuente
En iOS 8 puede configurar un NSLayoutConstraint para que esté activo o no. Entonces, si estoy usando el generador de interfaces, agrego todas mis restricciones a un OutletCollection y luego activo o desactivo usando:
La aplicación particular para la que lo estoy usando aquí tiene diferentes restricciones en el modo vertical y horizontal y activo / desactivo en función de la rotación del dispositivo. Significa que puedo crear algunos cambios de diseño complejos en el generador de interfaces para ambas orientaciones, y aún usar el diseño automático sin el código de diseño automático detallado.
O puede activar / desactivar usando removeConstraints y addConstraints.
fuente
No sé si esto ayudará a alguien más, pero escribí una categoría para que esto sea conveniente porque me encuentro haciendo esto mucho.
UIView + DisableAutolayoutTempontly.h
UIView + DisableAutolayoutTempontly.m
Lo uso así:
Espero eso ayude.
fuente
Puede establecer el
translatesAutoresizingMaskIntoConstraints
tipoBoolean
, Valor Sí en los Atributos de tiempo de ejecución definidos por el usuario de la UIView que desee en el xib / storyboard.fuente
Puede dividir en varios guiones gráficos si desea utilizar el diseño automático para algunas vistas.
fuente
Para mí, funcionó crear la subvista mediante programación, en mi caso, el diseño automático estaba jugando con una vista que necesitaba rotar alrededor de su centro, pero una vez que creé esta vista mediante programación, funcionó.
fuente
En mi opinión, tenía una etiqueta y un texto. La etiqueta tenía gesto de pan. La etiqueta se mueve bien durante el arrastre. Pero cuando utilizo el teclado del cuadro de texto, la etiqueta restablece su posición a la ubicación original definida en el diseño automático. El problema se resolvió cuando agregué lo siguiente rápidamente para la etiqueta. Agregué esto en viewWillAppear pero se puede agregar prácticamente en cualquier lugar donde tenga acceso al campo de destino.
fuente
Esto me sucedió en un proyecto sin guiones gráficos o archivos xib. Todo el código 100%. Tenía un banner publicitario en la parte inferior y quería que los límites de visualización se detuvieran en el banner publicitario. La vista cambiaría de tamaño automáticamente después de la carga. Probé todas las resoluciones de esta página, pero ninguna funcionó.
Terminé creando una vista secundaria con la altura reducida y la coloqué en la vista principal del controlador. Luego, todo mi contenido entró en la vista secundaria. Eso resolvió el problema muy fácilmente sin hacer nada que pareciera que iba contra la corriente.
Estoy pensando que si desea una vista que no sea del tamaño normal que llena la ventana, entonces debería usar una vista secundaria para eso.
fuente
Encontré un escenario similar, en el que me uní a un proyecto que se inició con diseño automático, pero necesitaba hacer ajustes dinámicos en varias vistas. Esto es lo que me ha funcionado:
NO tenga vistas o componentes dispuestos en el generador de interfaces.
Agregue sus vistas de forma puramente programática comenzando con alloc / init y configurando sus marcos de manera adecuada.
Hecho.
fuente
En lugar de deshabilitar el diseño automático, simplemente calcularía la nueva restricción con el marco que está reemplazando. Me parece que ésa es la forma adecuada. Si está ajustando componentes que dependen de restricciones, ajústelos en consecuencia.
Por ejemplo, si tiene una restricción vertical de 0 entre dos vistas (myView y otherView), y tiene un gesto de panorámica o algo que ajusta la altura de myView, puede volver a calcular la restricción con los valores ajustados.
fuente
Para aquellos de ustedes que están usando el diseño automático, por favor revisen mi solución aquí . Debería hacer
@IBOutlet
de las restricciones que desea ajustar y luego cambiar sus constantes.fuente
si es un archivo xib:
fuente