2012-10-07 29 views
13

Actualmente estoy atascado con un problema muy extraño. Estoy usando iOS 6 y Xcode 4.5. Tengo un guión gráfico con UIViewController y UIButton en él. Hice una salida débil UIButton a mi archivo .h.iOS no puede cambiar el marco de UIButton

En el archivo .m, quiero cambiar el marco del botón, pero no pasa nada. Sin embargo, tengo un UIImageView creado y conectado de la misma manera que el UIButton pero puedo cambiar el marco de UIImageView sin ningún problema.

Cuando hago esto:

NSLog(@"%@", button) 

consigo esta salida:

<UIButton: 0xa185a40; frame = (191 330; 73 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xa185640>> 

Y estas son las partes pertinentes de mi código:

-(void)viewDidLayoutSubviews{ 
    [self addStampGrid]; 
} 

-(void)addStampGrid { 

    // ... 

    [_button setFrame:CGRectMake(10,10,10,10)]; 
} 
+0

¿Cómo se muestra un poco más de contexto? http://sscce.org –

+0

Antes de intentar establecer el marco, intente con 'NSLog ("% @ ", button);' y asegúrese de que no sea nulo. Sospecho que la salida no está configurada correctamente. – lnafziger

+0

hmmm 'button' en NSLog y' _button' en setFrame –

Respuesta

23

tuve la misma extraña problema al utilizar XCode 4.5 e iOS 6 como destino de implementación. Aunque no estoy usando storyboard. Pude resolverlo deshabilitando la opción "Usar ajuste automático" en el Creador de interfaces. (En el archivo Inspector> Interfaz de generador de documentos.

Esperanza esto ayuda

+0

Esto parece un truco rápido y una mala idea. Sería mejor cambiar las restricciones con @IBOutlets y modificar el button.layer.frame. – boidkan

6

Retire la vista desde la supervista y después de establecer el marco agregar esta vez como una vista secundaria. Espero que esto va a funcionar bien ...

+0

Esto funcionó para mí, sin necesidad de que desactive por completo "Usar el diseño automático". Así que puedo tener una combinación de diseño automático y cálculo manual cuando sea conveniente. +1! –

1

// eliminar la vista desde la supervista

marco
UIView *view = yourButton.superview; 
[yourButton removeFromSuperview]; 

// cambio de UIButton

CGRect bounds = view.bounds; 
yourButton.center = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds)); 

// agregar esta vez como una subvista

[view addSubview:yourButton]; 
11

Puede cambiar de bastidor de su UIButton cambiando el marco de la capa de UIButton

[self.button.layer setFrame:] 

marco QuartzCore de importación en su cabecera de la clase antes de usar este. Esto funcionará también con el diseño automático.

+0

Up-votado, funcionó para mí. No sé por qué esta pregunta ha sido votada antes. – NSPratik

+0

esta es la respuesta correcta, sí. –

7

Puede utilizar esta

[_button setTranslatesAutoresizingMaskIntoConstraints:YES]; 

después de este marco se puede establecer de su botón.

Puede dar algunas advertencias en el registro sobre las restricciones, ya que esta propiedad anula las restricciones que proporcionó en el diseño automático.

Cuestiones relacionadas