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)