Tengo un punto de vista que debe tener su marco manipular mediante programación – es una especie de la vista del documento que se ajusta a su contenido, el cual es, a continuación, con desplazamiento y zoom alrededor de un superview manipulando el marco de origen. Autodiseño peleas con esto en tiempo de ejecución.

Desactivación de autodiseño completamente parece un poco dura, porque podría razonablemente ser utilizado para controlar la maquetación de las otras vistas. Parece que lo que yo quisiera es una especie de «null constraint».

14 Comentarios

  1. 166

    Yo tenía el mismo problema. Pero me he decidido él.

    Sí, usted puede deshabilitar el diseño en tiempo de ejecución para un determinado UIView, en lugar de inhabilitación para toda la xib o guión gráfico que se establece por defecto en Xcode 4.3 y versiones posteriores.

    Conjunto translatesAutoresizingMaskIntoConstraints a YES, antes de establecer el marco de su subvista:

    self.exampleView.translatesAutoresizingMaskIntoConstraints = YES;
    self.exampleView.frame = CGRectMake(20, 20, 50, 50);
    • Esto parece excesiva para algunos casos más complicados con un montón de puntos de vista. Para algo tan simple como esto, esto es bien.
    • Cutre, pero funciona para mí.
    • quitar subvista y, a continuación, agregarlo puede disminuir el rendimiento.Podemos archivar la mejor solución?
    • Me aclaró la respuesta. Quitar y volver a agregar la subvista no es necesario.
    • o en swift self.exampleView.setTranslatesAutoresizingMaskIntoConstraints(true)
    • Esto me demuestra advertencia : «no se puede satisfacer simultáneamente las restricciones.»
    • Usted salvó mi día … translatesAutoresizingMaskIntoConstraints … que inventa propiedades como esta shakinghead
    • esto es impresionante. Después de días de lágrimas, esto salvó mi día
    • Si usted todavía está teniendo problemas con inesperado restricciones también se establece view.autoresizingMask = AutoresizingMask(rawValue: 0).

  2. 49

    Tuve un problema similar donde Autodiseño fue primordial algunos de mis marco-configuración en tiempo de ejecución (yo tenía un punto de vista dinámico que, en algunos casos, empujó a un nuevo controlador de vista…presionando y después pulsando de nuevo se reinicie la vista inicial).

    Tengo alrededor de este por poner mi código de manipulación en viewDidLayoutSubviews de mi punto de Vista Controlador. Esto parece que se llama después de lo de la restricción de mojo se llama, pero antes de viewDidAppear, por lo que el usuario ninguno de los sabios.

    • No funciona por sí mismo.navigationItem.titleView. Todavía no respeta el marco de cambio.
    • Si usted está tratando de ocultar con el marco de un título de vista, me gustaría poner en el interior de un contenedor de ver y agregar el contenedor vista como una vista personalizada de la navigationItem.
    • Esto funcionó para mí. Yo había desperdiciado 2h:22m golpeando mi cabeza contra la proverbial de la pared antes de descubrir esta solución.
    • Gracias, hombre. Estoy en mi segundo día luchando con este problema y ya funciona!
  3. 26

    Tal vez sólo la creación de translatesAutoresizingMaskIntoConstraints a YES (y no agregar restricciones adicionales que afectan a la vista) le permitirá establecer el marco sin luchar contra el auto de diseño del sistema.

  4. 17

    En iOS 8 se puede establecer una NSLayoutConstraint a estar activo o no. Así que si estoy usando el interface builder, puedo añadir todos mis limitaciones a una OutletCollection y, a continuación, activar o desactivar el uso de:

    NSLayoutConstraint.deactivateConstraints(self.landscapeConstraintsPad)
    NSLayoutConstraint.activateConstraints(self.portraitConstraintsPad)

    La aplicación en particular lo estoy usando para aquí es tener diferentes restricciones en el retrato y modo de paisaje y me activar/desactivar basa en la rotación del dispositivo. Esto significa que puede crear complejos de diseño de todos los cambios en el interface builder para ambas orientaciones, y todavía el uso de automóviles de diseño sin el detallado diseño automático de código.

    O usted puede activar /desactivar el uso de removeConstraints y addConstraints.

    • Lo siento por el secuestro de esa vieja pregunta, pero puede que me pregunto cómo se las arregló para agregar restricciones de diseño para los diferentes diseños en el primer lugar? Me parece que no puede encontrar una opción dentro de la interfaz de generador para habilitar/deshabilitar las restricciones. O ¿simplemente agregar restricciones para ambos diseños y simplemente ignorar el interface builder, quejándose de no válido (reemplazar) limitaciones?
    • También se puede hacer mediante el uso de clases de tamaño: developer.apple.com/library/ios/recipes/…, pero yo no podía hacerlo de esta manera porque me estaba apoyando a iOS 7 y también el tamaño de las clases no plenamente el apoyo de iOS 7. Yo lo hice por la reducción de la prioridad de los conflictos de restricción. No es ideal, pero impide la advertencia. Creo que esta es la forma en que lo hice de todos modos….
  5. 8

    No sé si esto va a ayudar a nadie más, pero me escribió una categoría para que este cómodo porque me encuentro haciendo esto mucho.

    UIView+DisableAutolayoutTemporarily.h

    #import <UIKit/UIKit.h>
    
    @interface UIView (DisableAutolayoutTemporarily)
    
    //the view as a parameter is a convenience so we don't have to always
    //guard against strong-reference cycles
    - (void)resizeWithBlock:(void (^)(UIView *view))block;
    
    @end

    UIView+DisableAutolayoutTemporarily.m

    #import "UIView+DisableAutoResizeTemporarily.h"
    @implementation UIView (DisableAutoResizeTemporarily)
    
    - (void)resizeWithBlock:(void (^)(UIView * view))block
    {
        UIView *superview = self.superview;
        [self removeFromSuperview];
        [self setTranslatesAutoresizingMaskIntoConstraints:YES];
        __weak UIView *weakSelf = self;
        block(weakSelf);
        [superview addSubview:self];
    }
    
    @end

    Yo lo uso así:

    [cell.argumentLabel resizeWithBlock:^(UIView *view) {
        [view setFrame:frame];
    }];

    Espero que ayude.

    • Genial ! He utilizado una versión modificada de su código para escribir un simple «hideControl» de la función para cualquier UIView. Básicamente establece la altura de un UIView a 0, pero, fundamentalmente, se utiliza el código para realizar el diseño Automático de manejar correctamente (a diferencia del uso de «someView.hidden=TRUE»). Por lo tanto controla que aparecían bajo el control oculto, y había espaciado vertical vinculados a ella, ahora se mueven hacia arriba en la pantalla para llenar el vacío, donde el oculto-vista aparecido previamente.
    • Sólo me salvó la vida ! Mil gracias !
  6. 6

    Puede establecer el translatesAutoresizingMaskIntoConstraints tipo Boolean, el Valor Sí en la Definida por el Usuario de tiempo de ejecución de los Atributos de la UIView desee en el xib/storyboard.

  7. 1
    • Proyecto abierto en 4.5
    • Seleccione storyboard
    • Abra el inspector de archivo
    • En la Interfaz del Generador de Documento desmarcar la casilla «Usar Autodiseño’

    Puede dividir en varios storyboards si desea utilizar el diseño automático para algunos puntos de vista.

    • Que deshabilita el diseño automático para todo el guión gráfico/nib. Lo que yo estaba buscando era una manera de (idealmente programáticos) a que tengan particularmente en subvistas dentro de un guión gráfico/nib no uso autodiseño, dejando el resto haciendo lo que el guión gráfico/nib especificado.
    • Usted podría utilizar varios storyboards y simplemente invocar los con/sin autodiseño como sea necesario: //Inicializar el storboard & detalle de controlador de vista para mostrar UIStoryboard* sb = [UIStoryboard storyboardWithName:@»Storyboard» bundle:[NSBundle mainBundle]]; DetailViewController *dvController = [sb instantiateViewControllerWithIdentifier: entrada.viewName];
  8. 1

    A mí me ha funcionado para crear la vista mediante programación, en mi caso el diseño automático estaba jugando con un punto de vista que yo necesitaba para girar alrededor de su centro, pero una vez que he creado este punto de vista mediante programación funcionó.

  9. 1

    En mi opinión, yo tenía una Etiqueta y un Texto. La etiqueta tenía gesto de desplazamiento. La etiqueta se mueve alrededor de finos durante el arrastre. Pero cuando uso el cuadro de texto del teclado, la etiqueta restablece su posición a la ubicación original definido en el diseño automático. El problema se resolvió cuando he añadido el siguiente en swift para la etiqueta. He añadido esto en viewWillAppear pero se puede agregar casi en cualquier lugar donde tengan acceso a el campo de destino.

    self.captionUILabel.translatesAutoresizingMaskIntoConstraints = true
  10. 0

    Esto me pasó a mí en un proyecto sin guiones o xib archivos. Todos los 100% de código. Yo tenía un banner en la parte inferior y quería la opinión de los límites a parar en el banner de publicidad. La vista se redimensione automáticamente después de la carga. Traté de cada resolución en esta página, pero ninguno de ellos funcionó.

    Acabé la creación de una subcomisión de la vista con la menor altura y que en la vista principal de la controladora. Entonces todo mi contenido fue dentro de la sub vista. Que resuelto el problema muy fácilmente, sin hacer nada que se sentía como que iba en contra de la corriente.

    Estoy pensando si desea una vista que no es el tamaño normal que se llena la ventana, entonces usted debe utilizar un sub vista.

  11. 0

    Me he encontrado con una situación similar, donde me uní a un proyecto que se inició con el auto-diseño, pero necesitaba hacer ajustes dinámicos de varios puntos de vista. Esto es lo que ha funcionado para mí:

    1. NO tienen puntos de vista o componentes establecidos en el interface builder.

    2. Añadir sus puntos de vista puramente programática partida con alloc/init y la configuración de sus marcos adecuadamente.

    3. Hecho.

  12. 0

    Lugar de deshabilitar el diseño automático, acabo de calcular la nueva restricción con el fotograma que se va a reemplazar. Que me parece que para ser la manera adecuada. Si desea ajustar los componentes que se basan en las restricciones, ajustar en consecuencia.

    Por ejemplo, si usted tiene una restricción vertical de 0 entre dos puntos de vista (myView y otherView), y tiene un gesto de desplazamiento o algo que se adapta a la altura de myView a continuación, puede volver a calcular la restricción con los valores ajustados.

    self.verticalConstraint.constant = newMyViewYOriginValue - (self.otherView.frame.origin.y + self.otherView.frame.size.height);
    [self.myView needsUpdateConstraints];
  13. 0

    Para aquellos de ustedes que están usando diseño automático, por favor, echa un vistazo a mi de la solución de aquí. Usted debería hacer @IBOutlet‘s de las limitaciones que desea ajustar y, a continuación, cambiar sus constantes.

  14. -16

    si es xib de archivo:

    1. seleccione el .xib archivo
    2. seleccione el «Dueño del Archivo»
    3. mostrar las Utilidades
    4. haga clic en: «Inspector de Archivo»
    5. En «Generador de Interfaz de Documento» disable: «el Uso de Autodiseño»
    • No, que desactiva el diseño automático para toda la xib. Lo que yo estaba buscando es una manera de tomar sólo uno en particular subvista de la autodiseño del sistema.
    • Él sólo quiere deshabilitar el diseño Automático para una vista..

Dejar respuesta

Please enter your comment!
Please enter your name here