2014-11-19 11 views
6

Ich habe eine UITabBarController, die einige Registerkarten hat. Wenn ich die Ausrichtung der App ändern, in iOS 8, wird alle ViewController viewDidLoad aufgerufen. Dies geschieht nicht, wenn ich die App unter iOS 7 ausführe.Tabbar Viewcontroller wird neu geladen, während die Ausrichtung ändern, in iOS 8

Gibt es eine neue Funktion von iOS 8, die UITabBarController bei einer Orientierungsänderung neu lädt? Wenn ja Wie kann ich verhindern, dass meine Tableiste den View-Controller neu lädt?

Antwort

2

Parul Garg ist korrekt und ich habe das gleiche Problem erlebt.

Bitte beachten Sie, dass Sie Ihre Orientierungsänderungsmethoden manuell aufrufen müssen, sobald Sie viewWillTransitionToSize aktivieren.

Jeder Aufruf der Orientierungsänderungsmethode ruft diese Methode und die Methode in der Tabbar-Klasse auf.

Die Lösung ist die manuelle Anrufe zu verwenden, wie folgt:

-(void) viewWillTransitionToSize:(CGSize)sizewithTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
//[super viewWillTransitionToSize:sizewithTransitionCoordinator:coordinator]; 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    UIInterfaceOrientation toInterfaceOrientation = orientation;  
    if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) { 
     UINavigationController *navCtrl = (UINavigationController*)self.selectedViewController; 
     UIViewController* NavSubController = [[navCtrl viewControllers] lastObject]; 
     [NavSubController willRotateToInterfaceOrientation:toInterfaceOrientation duration:0.0]; 
    } 
} 
4

Ich hatte das gleiche Problem. Ich bemerkte, dass auf iOS8, wenn die Ausrichtung des Geräts viewWillTransitionToSize ändert: withTransitionCoordinator: wird auf UITabBarController aufgerufen, und UITabBarController ruft ViewDidLoad Methode von jedem Viewcontroller, der noch nicht geladen wurde.

Im Moment überschreibe ich diese Methode in meiner UITabBarController-Unterklasse, um [super viewWillTransitionToSize: size withTransitionCoordinator: coordinator] nicht aufzurufen.

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    //Do not call [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
    NSLog(@"Device orinetation changed"); 
}