7

Jest to obserwacja bardziej niż cokolwiek innego, bo wydaje się, że znaleźli obejście ...[UIDevice currentDevice] .orientation == UIDeviceOrientationUnknown następujące UINavigationController naciskać

Poniższy kod nie działa kiedy to w kontroler, który został wciśnięty na stos UINavigationController. W tej sytuacji [UIDevice currentDevice].orientation konsekwentnie zwraca UIDeviceOrientationUnknown.

-(void)layoutAccordingToOrientation { 
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; 
    NSLog(@"layoutAccordingToOrientation/orientation==%i", orientation); 
    if (UIInterfaceOrientationIsLandscape(orientation)) { 
     : 
     _detailToolbar.frame = CGRectMake(0, 660, 1024, 44); 
    } else { 
     : 
     _detailToolbar.frame = CGRectMake(0, 916, 768, 44); 
    } 
} 

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [self layoutAccordingToOrientation]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

następujące wywołanie został poczyniono:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

Aby obejść ten UIDeviceOrientationUnknown -problem, teraz kliknąć na poniższy zamiast:

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; 
if (UIInterfaceOrientationIsLandscape(orientation)) { 
    etc. 
} else { 
    etc. 
} 

... który działa każdego razu.

Nadal nie rozumiem, dlaczego pierwsza odmiana nie działałaby w kontekście kontrolera widoku pchanego. Czy ktoś ma pomysły? Czy to po prostu błąd?

+0

Mam ten sam problem, ale nie jestem w stanie sprawić, by twoja praca również działała w mojej sytuacji. – Flea

Odpowiedz

3

mogłem pomyśleć kilka rzeczy tutaj, ale nie jestem pewien, że są co szukasz ...

Po pierwsze, gdy aplikacja jest uruchomiona, zwykle orientacja urządzenie powraca UIDeviceOrientationUnknown ze względu na wydajność. Jedną rzeczą, którą możesz wypróbować, jest ułożenie subskrybentów wewnątrz pliku .nib lub w Storyboard z poprawnymi opcjami automatycznego zapisywania, i pozwól iOS zrobić to samo.

Po drugie, jeśli jesteś podobny do mnie, być może testujesz urządzenie znajdujące się obok komputera, leżące na stole. Cóż, w takim przypadku jesteś , a nie, aby uzyskać numer UIDeviceOrientationUnknown. Powinieneś przetestować pod kątem UIDeviceOrientationIsValidInterfaceOrientation([[UIDevice currentDevice] orientation]). Jeśli na przykład urządzenie leży na plecach, zwraca tak do tego polecenia. Oznacza to również, że podczas korzystania z UIInterfaceOrientationIsLandscape(orientation) otrzymujesz właściwy wynik z niewłaściwego powodu. UIInterfaceOrientationIsLandscape zwraca wartość false, nie dlatego, że orientacja urządzenia to UIDeviceOrientationPortrait, ale dlatego, że jest niepoprawna.

Nie jestem pewien, czy to pomogło, ale zajęło mi to trochę czasu i pomyślałem, że byłoby miło podzielić się tą informacją! :)

Powiązane problemy