当状态恢复时hidesBottomBarWhenPushed = YES时,导航控制器不隐藏tabbar

时间:2014-04-16 09:19:43

标签: ios objective-c uikit

我在使用位于UITabBarController中的UINavigationController中推送hidesBottomBarWhenPushed=YES的视图控制器恢复状态时遇到问题。

基本上会恢复UINavigationController堆栈并且屏幕上显示正确的控制器,但是该控制器不支持hidesBottomBarWhenPushed。

我想出的唯一可行的黑客是viewDidAppear上的快速选项卡切换,使TabBar消失,因为如果hidesBottomBarWhenPush设置应该发生:

- (void)_fixTabBarStateRestorationBug {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSInteger currentTab = (NSInteger)self.tabBarController.selectedIndex;
        self.tabBarController.selectedIndex = abs(currentTab - 1);
        self.tabBarController.selectedIndex = currentTab;
    });
}

1 个答案:

答案 0 :(得分:4)

这绝对是一个iOS错误。上面的解决方案对我来说并不开箱即用,但是如果你把它放在标签栏控制器的viewDidAppear方法中就行了:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    NSInteger currentTab = (NSInteger)self.tabBarController.selectedIndex;
    self.tabBarController.selectedIndex = abs(currentTab - 1);
    self.tabBarController.selectedIndex = currentTab;
});

如果将此项放在视图控制器的视图控制器viewDidAppear中,您将创建一个无限循环。在那个原因中使用问题中提到的一次令牌方法。