2010-06-15 13 views
7

Ho un piccolo UIView che dovrebbe apparire sempre al centro dello schermo. Funziona perfettamente per la modalità verticale ma non in orizzontale.Sempre centrale UIView

per disegnare l'UIView che uso:

myView.frame = CGRectMake((visibleArea.size.width - MY_VIEW_WIDTH)/2, (visibleArea.size.height - MY_VIEW_HEIGHT)/2, MY_VIEW_WIDTH, MY_VIEW_HEIGHT); 
myView.autoresizingMask = (
          UIViewAutoresizingFlexibleTopMargin | 
          UIViewAutoresizingFlexibleBottomMargin | 
          UIViewAutoresizingFlexibleLeftMargin | 
          UIViewAutoresizingFlexibleRightMargin 
          ); 

Tutte le idee che cosa potrebbe mancare?

risposta

21

perché non provare

myView.center = controller.view.center

+0

Questo funziona per me ogni volta. – Kyle

+1

Grazie per la risposta, anche se personalmente, mi piacerebbe sapere perché il codice del poster non funziona come previsto ... –

1

Forse non si modifica l'orientamento della barra di stato. Se non lo fai, il dispositivo pensa che l'orientamento sia ancora ritratto, non orizzontale.

+0

Non ho toccato la barra di stato e in realtà cambia posizione quando ruoto l'interfaccia. Il fatto è che non importa in quale modalità l'interfaccia trovi sempre i limiti della modalità verticale quando si richiedono i limiti [[UIScreen mainScreen]]. Questo ovviamente non è utile quando l'utente avvia l'app in orizzontale. Altro poi che l'autoresizing sembra essere confuso da qualcosa. –

+0

Mmmm, cerca di ottenere il frame con [[UIScreen mainScreen] applicationFrame]. Non sono sicuro che questo frame cambi con l'orientamento ma, se non lo fai, ottieni l'orientamento del dispositivo e, se è in orizzontale, cambia larghezza e altezza. – emenegro

+0

è lo stesso con il frame –

2

Is l'auto app in rotazione?

Voglio dire, qual è il tuo metodo -[UIViewController shouldAutorotateToInterfaceOrientation:]? Hai un orientamento iniziale e supportato nel tuo file Info.plist?

Controllare anche la vista genitore autoresizesSubviews proprietà.

1

Ho creato una proprietà per darmi i limiti, in base all'orientamento del dispositivo. (Questo è in una categoria su UIScreen.)

- (CGRect)boundsWithRespectToOrientation 
{ 
    CGRect bounds = self.bounds; 

    if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) && bounds.size.height > bounds.size.width) 
     bounds = CGRectMake(bounds.origin.x, bounds.origin.y, bounds.size.height, bounds.size.width); 
    else if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]) && bounds.size.width > bounds.size.height) 
     bounds = CGRectMake(bounds.origin.x, bounds.origin.y, bounds.size.height, bounds.size.width); 

    return bounds; 
} 
+0

Questo in realtà fa qualcosa? Restituisce lo stesso valore comunque ... –