在iOS 8中,Tabbar的viewcontroller在更改方向时会重新加载

时间:2014-11-19 12:15:22

标签: ios objective-c iphone uitabbarcontroller orientation

我有UITabBarController,标签很少。当我更改应用程序的方向时,在iOS 8中,所有它的viewController的viewDidLoad都会被调用。当我在iOS 7中运行应用程序时,这种情况不会发生。

iOS 8的任何新功能是否会在方向更改时重新加载UITabBarController? 如果是这样我怎么能阻止我的Tabbar重新加载它的视图控制器。

2 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。我注意到在iOS8上,当设备的方向改变时,viewWillTransitionToSize:withTransitionCoordinator:在UITabBarController上被调用,而UITabBarController调用尚未加载的任何viewcontroller的viewDidLoad方法。

现在,在我的UITabBarController子类中,我重写此方法不调用[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]。

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

答案 1 :(得分:2)

Parul Garg是正确的,我遇到了同样的问题。

请注意,启用viewWillTransitionToSize后,您需要手动调用方向更改方法。

每个方向更改方法调用,在tabbar类中调用此方法和方法。

解决方案是使用手动调用,如下所示:

-(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];
   }
}