当 hidesBottomBarWhenPushed = YES 状态恢复时,导航控制器不隐藏标签栏
Posted
技术标签:
【中文标题】当 hidesBottomBarWhenPushed = YES 状态恢复时,导航控制器不隐藏标签栏【英文标题】:Navigation controller isn't hiding tabbar when hidesBottomBarWhenPushed = YES on state restoration 【发布时间】: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;
);
【问题讨论】:
【参考方案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
尝试过。在这个生命周期的角度为我工作。以上是关于当 hidesBottomBarWhenPushed = YES 状态恢复时,导航控制器不隐藏标签栏的主要内容,如果未能解决你的问题,请参考以下文章
BannerViewController 干扰 hidesBottomBarWhenPushed
使用 hidesBottomBarWhenPushed 在 pop 上显示标签栏
为啥使用半透明导航栏刹车推动动画将“hidesBottomBarWhenPushed”设置为 YES?
hidesBottomBarWhenPushed 永远隐藏 TabBar
如何使用 iOS 6 SDK 解决 hidesBottomBarWhenPushed 的奇怪行为?
带有 UINavigationController 的 UITabBarController,在 hidesBottomBarWhenPushed 上隐藏 UINavigationController