es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AutoLayout: alturas iguales según la vista más alta.

Esto es conceptualmente similar a Autolayout height equal to MAX(multiple view heights), excepto que esa pregunta está dimensionando una vista contenedora, pero yo quiero que ambos botones tengan el mismo tamaño que el botón más alto.

Tengo dos botones uno al lado del otro en una sección del pie de página de una vista. Quiero que los botones tengan el mismo ancho, así que apliqué una restricción para hacerlos del mismo ancho y eso funciona bien. También quiero que tengan la misma altura, en caso de que uno de los botones ocupe más de una línea para su título. Intenté establecer la altura de ambos botones de la misma manera, pero cuando hago eso, siempre se utiliza la altura del botón más corto para determinar la altura de ambos botones. Por ejemplo, si el primer botón tiene solo una línea de texto y el segundo botón tiene tres líneas de texto, entonces ambos botones tendrán el tamaño de solo una línea de texto. Lo mismo sucede si se intercambia el texto para que el primer botón deba ser más alto.

También he establecido las prioridades de contenido envolvente y resistencia a la compresión para ambos botones, pero eso aún no parece ayudar o los estoy estableciendo incorrectamente.

[self->firstButton setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
[self->firstButton setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];

[self->firstButton setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
[self->firstButton setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisVertical];

Y las mismas prioridades se establecen para el segundo botón.

Aquí están las restricciones que hacen que ambos botones tengan el mismo tamaño y estas funcionan, ya que los botones tienen el mismo ancho y la misma altura, pero nuevamente el problema es que la altura es la altura del botón más corto (el botón con un texto de título más corto).

[self.firstButton.heightAnchor constraintEqualToAnchor:self.secondButton.heightAnchor],
[self.firstButton.widthAnchor constraintEqualToAnchor:self.secondButton.widthAnchor]

¿Alguien ve lo que podría estar haciendo mal? ¿O alguien sabe cómo solucionar esto para que ambos botones tengan la altura del botón más alto (el botón con un título más largo) y no la altura del botón con un título más corto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que ambos botones tengan la altura del botón más alto, puedes utilizar una combinación de ajustar las prioridades de agarre de contenido y resistencia a la compresión, y crear una restricción basada en la altura máxima de los botones.

    Primero, ajusta las prioridades de agarre de contenido y resistencia a la compresión de ambos botones para que sean iguales:

    [self.firstButton setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
    [self.secondButton setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
    
    [self.firstButton setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
    [self.secondButton setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
    

    Luego, crea una restricción que establezca la altura de ambos botones como la altura máxima de los botones:

    NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.firstButton
                                                                          attribute:NSLayoutAttributeHeight
                                                                          relatedBy:NSLayoutRelationLessThanOrEqual
                                                                             toItem:self.secondButton
                                                                          attribute:NSLayoutAttributeHeight
                                                                         multiplier:1.0
                                                                           constant:0];
    
    [self.view addConstraint:heightConstraint];
    

    Esta restricción asegurará que ambos botones tengan una altura menor o igual a la altura del botón más alto. Si el primer botón es más alto, la altura del segundo botón se ajustará en consecuencia, y viceversa.

    Con estos cambios, ambos botones deberían tener la misma altura y ser de la altura del botón más alto.

Comments are closed.