当推入 UITabBarController 内的 ViewController 时,Tabbar 不会隐藏

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 项目。

Müc*_*kin 5

您可以使用此代码来推送详细信息视图控制器:

 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)

您不需要再次初始化导航视图控制器和表视图控制器,它们已经在标签栏控制器内