当 iOS 7 上的 selectedIndex 值更改时,TabBar 消失
Posted
技术标签:
【中文标题】当 iOS 7 上的 selectedIndex 值更改时,TabBar 消失【英文标题】:TabBar disappears when selectedIndex value changes on iOS 7 【发布时间】:2014-02-10 15:27:35 【问题描述】:我有一个使用 6.1 基本 sdk 构建的 ios 应用程序。现在我将应用程序移动到下一个 SDK 7.0。我有一个标签栏,上面有 5 个项目。每个选项卡都是一个导航控制器。此外,每个被推入这些导航控制器的视图控制器都使用
方法隐藏标签栏[self setHidesBottomBarWhenPushed:YES];
当我在第二个选项卡上时,我按下一个按钮,在网络连接后,它会弹出到根视图控制器并更新 tabbarcontroller 的 selectedIndex。主标签栏控制器通过其在 appdelegate 中的引用进行访问。发生的事情是当所选索引是1,然后我将其设置为2个选项卡栏消失。但是,当它是 2 并且我再次将它设置为 2 时没有问题。
[self.application.tabBarController setSelectedIndex:2];
此问题仅在 iOS 7 模拟器中出现。当我在 iOS 6 模拟器上进行模拟时,它没有发生。我的标签栏项目也是自定义的,我不知道它是否与它有关。
可能是什么问题?
【问题讨论】:
【参考方案1】:我找到了解决方案。我的代码起初如下。标签栏控制器中的两个导航控制器都弹出到根视图控制器。
[self.navigationController popToRootViewControllerAnimated:YES];
[self.application.tabBarController setSelectedIndex:2];
[self.application.tabBarController.secondTabNavigationController popToRootViewControllerAnimated:YES];
当我重新排列 popToRootViewController 方法的顺序时,问题就消失了。
[self.application.tabBarController setSelectedIndex:2];
[self.application.tabBarController.secondTabNavigationController popToRootViewControllerAnimated:YES];
[self.navigationController popToRootViewControllerAnimated:YES];
第一个在 iOS 6 设备上运行良好,但在 iOS 7 设备上却不行。第二个适用于所有人。
【讨论】:
我在让一些 iOS 代码在 iOS7 上工作时遇到了类似的问题。我发现 [self.navigationController popToRootViewControllerAnimated:NO] 也可以。另请注意,根据以下答案,标签栏不应该以这种方式隐藏***.com/a/20622663/390557【参考方案2】:如果您确实需要先弹出到根 VC,然后才切换到另一个选项卡栏,则可以通过在动画参数中使用 false 来解决此问题:
// Assuming the current selected index might be a non-zero value
tabBarController.popToRootViewControllerAnimated(false)
tabBarController.selectedIndex = 0
这样您可以先popToRootViewControllerAnimated
,然后才能以编程方式切换到您想要的标签栏。
【讨论】:
以上是关于当 iOS 7 上的 selectedIndex 值更改时,TabBar 消失的主要内容,如果未能解决你的问题,请参考以下文章
当应用程序在后台运行时,iOS 7.x 上的 UINavigationController 推送/弹出错误
iOS7 UITabBarController 在以编程方式更改 selectedViewController 或 selectedIndex 后没有响应
QItemSelectionModel::selectedIndexes() 崩溃
iOS 7 上的 -[UITableView layoutSublayersOfLayer:] 中的断言失败