with topanchor constraint autolayout constraints ios8 parent nslayoutconstraint

autolayout - topanchor - Xcode6-Vista de autoejecución en otra vista de autodiseño



nslayoutconstraint swift 4 (1)

Las restricciones definidas están posicionando el botón verde relativo a su supervista. El problema radica en la falta de la restricción de posición vertical. También tenga en cuenta que la sintaxis visual que utilizó dio lugar a restricciones conflictivas:

  • 0 distancia al líder
  • 0 distancia al final (eliminé este para que funcione)
  • ancho de 35
  • supervista de witdth! = 35;

Si usa las siguientes restricciones para greenButton, se colocará arriba a la izquierda en su elemento principal.

[redView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button(35)]" options: 0 metrics:0 views:views]]; [redView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[button(35)]" options:0 metrics:0 views:views]];

Este problema no existía en xCode 5 incluso con ios8.

El cuadrado verde tiene que estar en el cuadrado rojo porque greenView es una subvista de la vista roja. Pero construido con xCode6, la posición de greenView no es relativa a su padre.

- (void)viewDidLoad { [super viewDidLoad]; /**** 1 - REDVIEW, THE CONTAINER *****/ UIView *redView = [UIView new]; redView.backgroundColor = [UIColor redColor]; redView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:redView]; UIView *spaceView = [UIView new]; spaceView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:spaceView]; NSDictionary *views = @{@"spaceView" : spaceView, @"redView": redView}; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[spaceView]|" options: 0 metrics:0 views:views]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[spaceView][redView]|" options: NSLayoutFormatAlignAllRight | NSLayoutFormatAlignAllLeft metrics:0 views:views]]; //CENTER VERTICALY NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:spaceView attribute:NSLayoutAttributeHeight multiplier:1 constant:0]; [self.view addConstraint:constraint]; /**** 1 - GREENBUTTON, IN THE CONTAINER *****/ UIButton *greenButton = [[UIButton alloc] init]; greenButton.backgroundColor = [UIColor greenColor]; greenButton.translatesAutoresizingMaskIntoConstraints = NO; [greenButton addTarget:self action:nil forControlEvents:UIControlEventTouchUpInside]; [redView addSubview:greenButton]; views = @{@"button" : greenButton}; [redView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button(35)]|" options: 0 metrics:0 views:views]]; }

¿Dónde está el problema? (Puede copiar y pegar esas líneas para intentar)