我有UITabBarController
,标签很少。当我更改应用程序的方向时,在iOS 8中,所有它的viewController的viewDidLoad
都会被调用。当我在iOS 7中运行应用程序时,这种情况不会发生。
iOS 8的任何新功能是否会在方向更改时重新加载UITabBarController
?
如果是这样我怎么能阻止我的Tabbar重新加载它的视图控制器。
答案 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];
}
}