我在使用位于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;
});
}
答案 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
中,您将创建一个无限循环。在那个原因中使用问题中提到的一次令牌方法。