如何消除“两阶段轮换”警告?
我的窗口的rootViewController是一个UINavigationController然后..在这个导航控制器的rootViewController中,我弹出一个模态视图(一个UITabBarController)
像这样的东西:
UIWindow ->UINavigationController -->MyFirstViewController<--In this class I run following code
[self.navigationController presentModalViewController:tabController animated:YES];
然后是调试器警告:当旋转多个视图控制器或视图控制器而不是窗口委托时,不支持使用两阶段旋转动画
但是,如果模态视图不是tabController,则不会出现此警告。
当我在导航控制器中弹出tabController模式视图时,这种行为会对应用程序造成什么伤害?
或者我应该找到另一种方法来做到这一点?
我在这个网站上发现了几个类似的问题,但我不明白……
原因是您在其预期用途之外使用UITabBarController。 它仅用作根控制器,如果您需要与tabbar使用工具栏类似的东西。 大约半年前我遇到了确切的问题。 不幸的是,如果你这样使用它,你也会遇到其他问题。
UITabBarController文档
由于UITabBarController类inheritance自UIViewController类,因此选项卡栏控制器具有可通过view属性访问的自己的视图。 部署选项卡栏界面时,必须将此视图安装为窗口的根目录。 与其他视图控制器不同,标签栏界面不应该作为另一个视图控制器的子项安装。
如果您只添加一个没有任何子控制器的空白UITabbarController,也会发生这种情况,如下所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; //Tab bar controller UITabBarController* tabBarController = [[UITabBarController alloc] init]; [[self window] setRootViewController:tabBarController]; [self.window makeKeyAndVisible]; return YES; }
如果在将UWabBarController声明为UIWindow的rootViewController之前将子视图控制器添加到UITabBarController,则警告将消失。
我在inheritanceUITabBarController但忘记在我自己的类中调用基类的viewWillAppear:方法时得到了相同的警告。
- (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated] // <--- adding this fixed the warning ... }
我有一个应用程序,其中UITabBarController
是根视图控制器。 根据应用内购买,子视图控制器是不同的。
在我的NIB中,我有没有任何子视图控制器的UITabBarController
。 我在application:didFinishLaunchingWithOptions:
添加了子视图控制器application:didFinishLaunchingWithOptions:
这导致警告“两阶段”旋转出现。 一旦我将一个子视图控制器添加到NIB中的tabbar控制器,它就消失了。
@Maciej Swic的回答对我有所帮助。
在我的情况下,我已经有2个孩子为UITabBarController。
出于一些奇怪的原因,我只需要放
[self.window makeKeyAndVisible];
我加了两个孩子后。
Oliver的回答为我做了诀窍……虽然很有趣,但是直到我添加了一个viewWillAppear:动画方法到子类的tabviewcontroller之前我没有遇到任何问题……那时,一切都变得混乱,直到它是通过添加[super viewWillAppear:animated]语句来修复的,奥利弗建议……
有两级动画警告的问题,顺序如下:
self.window.rootViewController = self.tabBarController; self.tabBarController.selectedIndex = 0;
但是改变顺序可以帮助我消除警告。
self.tabBarController.selectedIndex = 0; self.window.rootViewController = self.tabBarController;
希望这可以帮助。