【问题标题】:Navigation controller isn't hiding tabbar when hidesBottomBarWhenPushed = YES on state restoration当 hidesBottomBarWhenPushed = YES 状态恢复时,导航控制器不隐藏标签栏
【发布时间】:2014-04-16 09:19:42
【问题描述】:

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

发生的情况基本上是 UINavigationController 堆栈已恢复并且正确的控制器在屏幕上,但该控制器不尊重 hidesBottomBarWhenPushed。

我想出的唯一可行的技巧是 viewDidAppear 上的快速选项卡开关,以使 TabBar 消失,因为它应该在设置 hidesBottomBarWhenPushed 时发生:

- (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;
    });
}

【问题讨论】:

    标签: ios objective-c uikit


    【解决方案1】:

    这绝对是一个 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 中的视图控制器中,你将创建一个无限循环。为此,请使用问题中提到的一次性令牌方法。

    【讨论】:

    • 嘿,Ben,我很好奇,你有没有从viewDidAppear 尝试过。在这个生命周期的角度为我工作。
    猜你喜欢
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多