tab bottom bar ios xcode-storyboard ios-autolayout

bottom - tab bar ios



¿Cómo eliminar las restricciones programáticamente que se agregan desde el guión gráfico? (8)

He buscado en google pero no he encontrado respuesta. Así que necesito preguntar. Tengo una pantalla de inicio. Cuando el usuario haya iniciado sesión, se mostrará una vista como la siguiente: Ahora, cuando el usuario se desconectó y visitó la página de inicio, verá el diseño anterior pero sin el diseño central del cuadro. Si configuro Ese diseño oculto, ahora se muestra de la siguiente manera.

Quiero mover la tercera disposición un poco más arriba para eliminar el espacio en blanco ...

Agregué restricciones usando el guión gráfico. Ahora debe eliminar las restricciones de la programación y agregar una restricción que establezca el diseño a continuación del primer diseño.


Como se mencionó @Henit, también puede establecer IBOutlet para las restricciones.

Por ejemplo,

@property(weak, nonatomic) IBOutlet NSLayoutConstraint *viewHeight;

así que ahora, puedes eliminar esta restricción de la siguiente manera:

[myView removeConstraint: viewHeight];

O bien, si desea eliminar todas / múltiples restricciones relacionadas con su vista, entonces,

[myView removeConstraints: constraintsArrayHere]; // custom array of constraints references [myView removeConstraints: [myView constraints]]; //all constraints

Luego, más adelante, puede agregar sus nuevas restricciones de la misma manera utilizando el método addConstraint o addConstraints .

Para más detalles consulte la documentación de Apple here.

Espero que esto ayude.


En Swift 4

@IBOutlet weak var viewHeight: NSLayoutConstraint! viewHeight.isActive = false

Feliz codificación :)


Es bastante simple desde iOS 10+, simplemente puede iterar sobre todas las restricciones de una vista y desactivarla. Si, por ejemplo, desea buscar y eliminar la restricción de altura de una vista, puede hacer lo siguiente:

for constraint in constraints { guard constraint.firstAnchor == heightAnchor else { continue } constraint.isActive = false break }

ALTERNATIVA
Es incluso una sola línea. Si estás dentro de tu vista, puedes simplemente escribir:

constraints.first { $0.firstAnchor == heightAnchor }?.isActive = false


Para ampliar la respuesta de NSLayoutConstraint : puede usar la propiedad active de NSLayoutConstraint . Solo configure dos restricciones diferentes para los dos casos y active solo una de ellas dependiendo del estado de inicio de sesión. En InterfaceBuilder la propiedad active se llama extrañamente Installed :

Luego en su código cambie entre los dos:

- (void)setupRegistrationView { _loadingIndicatorTopConstraintLogin.active = NO; _loadingIndicatorTopConstraintRegister.active = YES; } - (void)setupLoginView { _loadingIndicatorTopConstraintLogin.active = YES; _loadingIndicatorTopConstraintRegister.active = NO; }

Por cierto, el uso del nuevo UIStackView puede proporcionar una solución más elegante para su caso, pero ese es otro tema.


Puede agregar una restricción de altura para la vista que desea ocultar. Y agregue una salida de NSlayoutHeightcontraint para esa restricción de altura en su archivo viewcontroller.h. Luego puede llamar a esa salida de heightConstrain en su archivo viewcontroller.m donde lo necesite. Agregue este código donde desea ocultar esta vista de UIview :

_heightconstrainOutlet.constant=0;

Hará que la altura sea cero. Así que su vista inferior cubrirá esa área también. ¿Si su vista inferior tenía una restricción de altura y un espacio inferior a una restricción de contenedor? Simplemente elimine cualquiera de ellos como requisito. Gracias.


Puedes hacerlo de otra manera también. Agregue una restricción de espacio vertical entre el tercer diseño y la primera disposición, que será 30. Luego, agregue una referencia a la restricción en el controlador.

self.verticalSpacingFromThirdToFirstConstraint.constant = isLoggedIn ? 30.0 : 0.0

PD: en este caso, no debe agregar una restricción de altura para la vista central. Solo agregue los cuatro finales, anterior, superior (al primer diseño) e inferior (al tercer diseño).


Tome el IBOutlet de la restricción de altura de vista que desea ocultar cuando el usuario cierre la sesión.

@property(weak, nonatomic) IBOutlet NSLayoutConstraint *viewHeight;

Hay una constante de propiedad en la clase NSLayoutConstraint . Debe configurarlo cuando el usuario inicie sesión / cierre sesión.

viewHeight.constant = isLoggedIn ? 30.0 : 0.0;

Espero que esto ayude..


removeConstraints quedará en desuso en el futuro.

Puedes usar lo siguiente como alternativa

viewHeight.active = NO;