在iOS 8中,当改变设备方向时,Tabbar的视图控制器会重新加载。

7

我有一个UITabBarController,其中有几个选项卡。当我改变应用程序的方向时,在iOS 8中,所有它的视图控制器的viewDidLoad都会被调用。但在iOS 7中运行应用程序时不会出现这种情况。

这是iOS 8的新功能吗?如何防止我的选项卡重新加载它的视图控制器?

2个回答

4

我遇到了同样的问题。我注意到在iOS8上,当设备的方向发生变化时,UITabBarController会调用viewWillTransitionToSize:withTransitionCoordinator:方法,并调用尚未加载的任何视图控制器的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");
}

2

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

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

每次方向更改方法调用都会调用此方法和选项卡栏类中的方法。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接