我的窗口的rootViewController是一个UINavigationController 然后..在这个导航控制器的rootViewController中,我弹出一个模态视图(一个UITabBarController)
类似的东西:
UIWindow
->UINavigationController
-->MyFirstViewController<--In this class I run following code
[self.navigationController presentModalViewController:tabController animated:YES];
然后调试器警告:当旋转多个视图控制器或视图控制器而不是窗口委托时,不支持使用两阶段旋转动画
但是,如果模态视图不是tabController,则不会出现此警告。
当我在导航控制器中弹出tabController模式视图时,这种行为会对应用程序造成什么影响?
或者我应该找另一种方法来做到这一点?
我在这个网站上发现了几个类似的问题,但我没有得到它......
答案 0 :(得分:14)
原因是您在其预期用途之外使用UITabBarController。它仅用作根控制器,如果需要与tabbar使用工具栏类似的东西。大约半年前,我遇到了确切的问题。不幸的是,如果你这样使用它,你也会遇到其他问题。
UITabBarController documentation
因为UITabBarController类 继承自UIViewController 类,标签栏控制器有它们的 自己可以访问的视图 视图属性。部署时 标签栏界面,必须安装 此视图作为窗口的根。 与其他视图控制器不同,标签 吧界面永远不应该 安装为另一个视图的孩子 控制器。
答案 1 :(得分:12)
如果您只添加一个没有任何子控制器的空白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,警告就会消失。
答案 2 :(得分:12)
在子类化UITabBarController但忘记在我自己的类中调用基类的viewWillAppear:方法时,我收到了相同的警告。
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated] // <--- adding this fixed the warning
...
}
答案 3 :(得分:2)
我有一个应用程序,其中UITabBarController
是根视图控制器。根据应用内购买,子视图控制器是不同的。
在我的NIB中,我有UITabBarController
没有任何子视图控制器。我在application:didFinishLaunchingWithOptions:
这导致警告“两阶段”旋转出现。一旦我将一个子视图控制器添加到NIB中的tabbar控制器,它就消失了。
答案 4 :(得分:0)
@Maciej Swic的回答对我有所帮助。
在我的情况下,我已经为UITabBarController提供了2个孩子。
出于某种奇怪的原因,我只需要放
[self.window makeKeyAndVisible];
我加了两个孩子后。
答案 5 :(得分:0)
Oliver的答案为我做了诀窍......虽然很有趣,但是我没有遇到任何问题,直到我添加了一个viewWillAppear:动画方法到子类的tabviewcontroller ......那时候,一切都进行了haywire,直到通过添加[super viewWillAppear:animated]语句来修复Oliver建议...
答案 6 :(得分:0)
按照以下顺序出现两阶段动画警告问题:
self.window.rootViewController = self.tabBarController;
self.tabBarController.selectedIndex = 0;
但改变顺序可以帮助我消除警告。
self.tabBarController.selectedIndex = 0;
self.window.rootViewController = self.tabBarController;
希望这有帮助。