2012-10-09 31 views
16

He creado una UIView usando el siguiente código dentro de viewDidLoad (donde 'secondview', obviamente, es el nombre de la UIView):¿Cómo agregar restricciones programáticamente a una UIView creada mediante programación?

secondview = [[UIView alloc] initWithFrame:self.view.frame]; 
    [secondview setBackgroundColor: [UIColor yellowColor]]; 
    secondview.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.view addSubview:secondview]; 

Luego, dentro de viewDidAppear que añaden limitaciones a este punto de vista:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:secondview attribute:NSLayoutAttributeRight 
    relatedBy:NSLayoutRelationEqual 
    toItem:self.view 
    attribute:NSLayoutAttributeRight 
    multiplier:1.0f constant:-20.0f]; 
[self.view addConstraint:constraint]; 

Sin embargo, las restricciones no se aplican a la vista (al menos no que yo pueda ver). En cambio, la vista simplemente parece desaparecer de la pantalla. Sin embargo, si el código de restricción está comentado, la vista vuelve a cargarse con el marco apropiado (obviamente sin las restricciones aplicadas). Al aplicar las mismas restricciones a un botón o ImageView, las restricciones se aplican perfectamente. Esto me ha llevado a pensar que el problema se debe a 'initWithFrame' al crear la Vista, ya que ni el botón ni ImageView en realidad requieren que se especifique su tamaño.

¿Cuáles son sus pensamientos? ¿Qué debería hacer de manera diferente?

Respuesta

12

Para cualquier persona que se encuentre con esto ... Necesitaba agregar más de una restricción. Eso hizo el truco.

+1

Sí, esto me ayudó también. Aparentemente necesitas al menos dos restricciones o la vista no se mostrará. – JasonD

+1

Necesita tantas como sea necesario para eliminar la ambigüedad. Esto puede ser tan poco como dos, pero a veces más. (Las etiquetas, por ejemplo, requieren un mínimo de dos, puede inferir el tamaño del texto, pero debe darle una X e Y) – LightningStryk

Cuestiones relacionadas