我有一个UITabBarController
,其中有几个选项卡。当我改变应用程序的方向时,在iOS 8中,所有它的视图控制器的viewDidLoad
都会被调用。但在iOS 7中运行应用程序时不会出现这种情况。
这是iOS 8的新功能吗?如何防止我的选项卡重新加载它的视图控制器?
我有一个UITabBarController
,其中有几个选项卡。当我改变应用程序的方向时,在iOS 8中,所有它的视图控制器的viewDidLoad
都会被调用。但在iOS 7中运行应用程序时不会出现这种情况。
这是iOS 8的新功能吗?如何防止我的选项卡重新加载它的视图控制器?
我遇到了同样的问题。我注意到在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");
}
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];
}
}