TabBarViewController 的导航栏覆盖来自导航控制器的导航栏

Posted

技术标签:

【中文标题】TabBarViewController 的导航栏覆盖来自导航控制器的导航栏【英文标题】:Navigation bar of TabBarViewController covers Navigation Bar from Navigation Controller 【发布时间】:2018-12-08 09:09:10 【问题描述】:

我正在尝试使用导航控制器中的导航栏,同时使用 UITabBarController 中的标签栏。如果我将导航控制器的根控制器设置为我的标签栏视图控制器,我会得到图像 2。如果我将根控制器设置为我的主视图控制器(即标签栏项目 0),我会得到图片 1。

所需的导航栏

想要的标签栏

我没有使用情节提要,现在我的层次结构如下:

NavigationController->UITabBarController->ViewControllers

AppDelegate.swift:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 
    // Override point for customization after application launch.

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()
    window?.rootViewController = UINavigationController(rootViewController: TabViewController())

    return true

【问题讨论】:

这可能会有所帮助***.com/questions/31548909/… 【参考方案1】:

发生这种情况是因为如果您有多个 navigationController 或 NavigationBar,则默认情况下初始导航栏将覆盖下一个导航栏。您可以通过将初始navigationController的导航栏设置为隐藏来达到预期的效果

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 

 window = UIWindow(frame: UIScreen.main.bounds)
 window?.makeKeyAndVisible()
 let navigation =  UINavigationController(rootViewController: TabViewController()) 
 navigation.setNavigationBarHidden(true, animated: false)
 window?.rootViewController = navigation
 return true 

【讨论】:

以上是关于TabBarViewController 的导航栏覆盖来自导航控制器的导航栏的主要内容,如果未能解决你的问题,请参考以下文章

如何创建以 TabBarViewController 为根的导航堆栈?

导航回父视图控制器时,UIButton 在选项卡栏后面 - iOS

自定义标签栏项目

Dota2APP--第二天

无法设置标签栏项目

从 UIViewController 过渡到 TabBarViewController