2010-06-15 11 views
7

Mam mały UIView, który powinien pojawić się zawsze na środku ekranu. Działa to doskonale w trybie portretowym, ale nie w orientacji poziomej.Zawsze centrum UIView

zwrócić UIView używać:

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 
          ); 

jakieś pomysły co może być brakuje?

Odpowiedz

21

Dlaczego nie spróbować

myView.center = controller.view.center

+0

To działa dla mnie za każdym razem. – Kyle

+1

Dziękuję za odpowiedź, chociaż osobiście, chciałbym wiedzieć, dlaczego kod plakatu nie działa zgodnie z oczekiwaniami ... –

1

Być może nie zmieniasz orientacji paska stanu. Jeśli tego nie zrobisz, urządzenie uzna, że ​​orientacja jest nadal portretem, a nie pejzażem.

+0

Nie dotknąłem paska stanu i faktycznie zmienia położenie, gdy obracam interfejs. Chodzi o to, że bez względu na to, w jakim trybie interfejs jest zawsze, zawsze uzyskujesz granice trybu portretu, gdy pytasz o ograniczenia [[UIScreen mainScreen]]. Nie jest to oczywiście przydatne, gdy użytkownik uruchamia aplikację w orientacji poziomej. Poza tym autouzupełnianie wydaje się być przez coś niejasne. –

+0

Mmmm, spróbuj uzyskać ramkę za pomocą [[UIScreen mainScreen] applicationFrame]. Nie jestem pewien, czy ta ramka zmienia się wraz z orientacją, ale jeśli tego nie robisz, uzyskaj orientację urządzenia, a jeśli jest w krajobrazie, zmień szerokość i wysokość. – emenegro

+0

to samo z ramką –

2

to aplikacja automatycznie obraca?

Mam na myśli, jak wygląda twoja metoda -[UIViewController shouldAutorotateToInterfaceOrientation:]? Czy posiadasz wstępne i obsługiwane orientacje w pliku Info.plist?

Sprawdź również właściwości widoku rodzica autoresizesSubviews.

1

Stworzyłem właściwość, która daje mi granice, w zależności od orientacji urządzenia. (To jest w kategorii na ekranie 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

Czy to rzeczywiście coś robi? W każdym razie zwraca tę samą wartość ... –