Isu*_*uru 0 uitabbarcontroller uiviewcontroller uinavigationcontroller ios swift
出于这个问题的目的,我展示了我的视图层次结构的精简版本。我的应用程序包含一个UITabBarController作为基础。每个选项卡最顶部的视图控制器是一个导航控制器,并且每个视图控制器都嵌入了视图控制器。
让我们拿第一个标签。
UITabBarController -> UINavigationController -> UITableViewController -> UIViewController
假设UITableViewController实例是某种列表,而UIViewController是详细视图。当用户点击列表中的项目时,它会将您带到详细信息视图。当发生这种情况时,我已将UIViewController'shidesBottomBarWhenPushed属性设置为,true以便当用户处于详细视图时底部的标签栏将隐藏。
我的应用程序接收推送通知。当点击它们时,它应该直接打开到详细视图。我可以让它在那里导航。但问题是底部的标签栏仍然可见!
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
window = UIWindow(frame: UIScreen.main.bounds)
let tabBarController = storyboard.instantiateViewController(withIdentifier: "TabBarController") as! TabBarController
if openingFromPush {
let firstNavigationController = storyboard.instantiateViewController(withIdentifier: "FirstNavigationController") as! UINavigationController
let tableViewController = storyboard.instantiateViewController(withIdentifier: "TableViewController") as! TableViewController
let viewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
viewController.hidesBottomBarWhenPushed = true
firstNavigationController.viewControllers = [tableViewController, viewController]
tabBarController.viewControllers?[0] = firstNavigationController
// tabBarController.tabBar.isHidden = true
window?.rootViewController = tabBarController
} else {
window?.rootViewController = tabBarController
}
window?.makeKeyAndVisible()
return true
}
Run Code Online (Sandbox Code Playgroud)
我在实例化视图控制器时将相同的hidesBottomBarWhenPushed属性设置为truein ,但这似乎没有任何效果。我什至尝试像这样直接隐藏标签栏,tabBarController.tabBar.isHidden = true但这也根本没有任何作用。
我不知道如何解决这个问题。任何帮助,将不胜感激。
如果有帮助,我也在这里附上了一个示例 Xcode 项目。
您可以使用此代码来推送详细信息视图控制器:
if openingFromPush {
let viewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
viewController.hidesBottomBarWhenPushed = true
if let nvc = tabBarController.viewControllers?[0] as? UINavigationController {
nvc.pushViewController(viewController, animated: false)
}
window?.rootViewController = tabBarController
}
Run Code Online (Sandbox Code Playgroud)
您不需要再次初始化导航视图控制器和表视图控制器,它们已经在标签栏控制器内
| 归档时间: |
|
| 查看次数: |
1151 次 |
| 最近记录: |