2012-10-07 12 views
13

Attualmente sono bloccato con un problema molto strano. Sto usando iOS 6 e Xcode 4.5. Ho uno storyboard con uno UIViewController e uno UIButton in esso. Ho creato uno sfogo UIButton debole nel mio file .h.iOS non può cambiare il frame di UIButton

Nel file .m voglio cambiare la cornice del pulsante, ma non succede nulla. Eppure ho uno UIImageView creato e connesso allo stesso modo del UIButton ma posso cambiare il frame di UIImageView senza problemi.

Quando faccio questo:

NSLog(@"%@", button) 

ottengo questo output:

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

e questi sono gli elementi rilevanti di mio codice:

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

-(void)addStampGrid { 

    // ... 

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

Come posso mostrare un po 'più di contesto? http://sscce.org –

+0

Prima di provare a impostare la cornice, prova 'NSLog ("% @ ", pulsante);' e assicurati che non sia nullo. Sospetto che la presa non sia impostata correttamente. – lnafziger

+0

hmmm 'button' in NSLog e' _button' in setFrame –

risposta

23

Ho avuto lo stesso strano problema nell'utilizzo di XCode 4.5 e iOS 6 come obiettivo di distribuzione. Comunque non sto usando la storyboard. Sono riuscito a risolverlo disabilitando l'opzione "Usa Autolayout" in Interface Builder. (Nel file inspector-> documento Interface Builder.

Spero che questo aiuti

+0

Questo sembra un trucco rapido e una cattiva idea. Sarebbe meglio cambiare i vincoli con @IBOutlets e modificare button.layer.frame. – boidkan

6

Rimuovere la vista dal superview e dopo aver impostato frame Aggiungi questo punto di vista ancora come una visualizzazione secondaria. Spero che questo funzionerà bene ...

+0

Questo ha funzionato per me, senza richiedere di disattivare completamente "Usa l'Autolayout". Quindi posso avere un mix di layout automatico e calcolo manuale quando opportuno. +1! –

1

// Rimuovere la vista dal superview

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

// cambiamento cornice di UIButton

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

// aggiungere nuovamente questo punto di vista come una visualizzazione secondaria

[view addSubview:yourButton]; 
11

È possibile modificare fotogramma del UIButton cambiando cornice di strato di UIButton

[self.button.layer setFrame:] 

quadro importazione QuartzCore nella intestazione di classe prima di utilizzare questo. Funzionerà anche con il layout automatico.

+0

Up-votato, ha funzionato per me. Non so perché questa domanda sia stata sottovalutata prima. – NSPratik

+0

questa è la risposta corretta, sì. –

7

È possibile utilizzare questo

[_button setTranslatesAutoresizingMaskIntoConstraints:YES]; 

dopo questo si può impostare cornice del pulsante.

Può dare alcuni avvertimenti nel registro sui vincoli, come questo di override proprietà vincoli hai dato nel layout automatico.

Problemi correlati