iOS 8 Swift导航栏标题,按钮未显示在基于选项卡的应用程序中

我正在尝试按照本教程 , 这个答案和这个答案为iOS 8 / Swift中基于选项卡的应用程序中的每个选项卡创建导航栏,但导航栏上没有显示标题或按钮。

这是我到目前为止:

// AppDelegate.swift func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let tabBarController = UITabBarController() let vc1 = ViewController() let vc2 = ViewController() let vc3 = ViewController() let nc1 = UINavigationController(rootViewController: vc1) let nc2 = UINavigationController(rootViewController: vc2) let nc3 = UINavigationController(rootViewController: vc3) let controllers = [nc1,nc2,nc3] tabBarController.viewControllers = controllers nc1.tabBarItem = UITabBarItem(title: "item1", image: nil, tag: 1) nc2.tabBarItem = UITabBarItem(title: "item2", image: nil, tag: 1) nc3.tabBarItem = UITabBarItem(title: "item3", image: nil, tag: 1) window = UIWindow(frame: UIScreen.mainScreen().bounds) window?.rootViewController = tabBarController window?.makeKeyAndVisible() return true } // ViewController.swift class ViewController: UIViewController, UINavigationBarDelegate { override func viewDidLoad() { super.viewDidLoad() let navigationBar = UINavigationBar(frame: CGRectMake(0, 0, self.view.frame.size.width, 44)) navigationBar.backgroundColor = UIColor.blueColor() navigationBar.delegate = self; let navigationItem = UINavigationItem() navigationItem.title = "Title" let leftButton = UIBarButtonItem(title: "Left Button", style: UIBarButtonItemStyle.Plain, target: self, action: nil) let rightButton = UIBarButtonItem(title: "Right Button", style: UIBarButtonItemStyle.Plain, target: self, action: nil) navigationItem.leftBarButtonItem = leftButton navigationItem.rightBarButtonItem = rightButton navigationBar.items = [navigationItem] } func positionForBar(bar: UIBarPositioning) -> UIBarPosition { return UIBarPosition.TopAttached } } 

但我只是在模拟器的顶部找到一个空白的导航栏。

iPhone 6模拟器截图

您正在使用UINavigationBar为您提供自定义UINavigationController

ViewController尝试这样做:

 override func viewDidLoad() { super.viewDidLoad() self.title = "Title" let navigationBar = navigationController!.navigationBar navigationBar.tintColor = UIColor.blueColor() let leftButton = UIBarButtonItem(title: "Left Button", style: UIBarButtonItemStyle.Plain, target: self, action: nil) let rightButton = UIBarButtonItem(title: "Right Button", style: UIBarButtonItemStyle.Plain, target: self, action: nil) navigationItem.leftBarButtonItem = leftButton navigationItem.rightBarButtonItem = rightButton } 

不需要使用新的导航栏只需使用现有的导航栏。 记住你在这里做了什么:

 let nc1 = UINavigationController(rootViewController: vc1) 

所以你的视图控制器已经嵌入到导航控制器中,只需使用self来访问导航项

 self.title = "Your Title" var homeButton = UIBarButtonItem(title: "LeftButton", style: .Plain, target: self, action: "") var logButton = UIBarButtonItem(title: "RigthButton", style: .Plain, target: self, action: "") self.navigationItem.leftBarButtonItem = homeButton self.navigationItem.rightBarButtonItem = logButton 

我不必要地创建了两个导航栏。 导航控制器附带一个导航栏,我将我的ViewController更改为:

 class ViewController: UIViewController, UINavigationBarDelegate { override func viewDidLoad() { super.viewDidLoad() self.navigationItem.title = "My Title" self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Left Button", style: UIBarButtonItemStyle.Plain, target: self, action: nil) self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right Button", style: UIBarButtonItemStyle.Plain, target: self, action: nil) } func positionForBar(bar: UIBarPositioning) -> UIBarPosition { return UIBarPosition.TopAttached } }