Powód: Może istnieć wiele możliwości rozwiązania tego problemu.
1) Jeśli twój pogląd na viewController
jest subView
jakiegoś innego rootViewController
który nie jest navigationController
, wtedy może istnieć prawdopodobieństwo, że wezwanie obrót nie jest propagowana do kontrolera za podrzędny.
2) Gdzieś czytałem, że jeśli Super
metody nie są nazywane odpowiednio, gdzie jest to potrzebne to może być przyczyną problemu rotacji, co oznacza, że wszystkie ViewControllers Mając na stosie, które są związane z autorotacji musi wywołać metody super
w implementacjach metod (tj. wywoływanie [super viewDidLoad]
z ViewController's viewDidLoad
).
Możesz użyć poniższej sztuczki do obsługi zmian orientacji.
Zarejestruj notifier w viewWillAppear.
-(void)viewWillAppear:(BOOL)animated{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];}
Zmiana orientacji spowoduje wyświetlenie poniższej funkcji.
- (void)orientationChanged:(NSNotification *)notification{
[self handleOrientation:[[UIApplication sharedApplication] statusBarOrientation]];}
, który wywoła poniższą metodę, w której można obsłużyć zmiany orientacji.
- (void) handleOrientation:(UIInterfaceOrientation) orientation {
if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
{
//handle the portrait view
}
else if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight)
{
//handle the landscape view
}
}
Przyczyna nr 2 rozwiązała mój problem ... Super musi się nazywać – lucaslt89