【发布时间】:2018-11-21 05:56:06
【问题描述】:
我有一个项目,我将 TableViewCells 推送到不同的视图控制器。在这个项目中,我使用自定义导航控制器。这是第一个视图控制器中导航控制器的代码:
//Design of Header
let nav_background = UIImage(named: "header_background")
navigationController?.navigationBar.setBackgroundImage(nav_background, for: .default)
navigationController?.navigationBar.layer.shadowOffset = CGSize(width: 0, height: 1)
navigationController?.navigationBar.layer.shadowOpacity = 0.16
navigationController?.navigationBar.layer.shadowRadius = 10
let account = UIImage(named: "header_account")
let imageView = UIImageView(image: account)
let blankView = UIImageView()
imageView.contentMode = .scaleAspectFit
imageView.layer.shadowOffset = CGSize(width: -3, height: 3)
imageView.layer.shadowOpacity = 0.16
imageView.layer.shadowRadius = 10
self.navigationController?.navigationBar.topItem?.rightBarButtonItem?.customView = imageView
self.navigationController?.navigationBar.topItem?.leftBarButtonItem?.customView = blankView
第一个视图控制器只显示自定义背景,没有其他属性。
这是第二个视图控制器的代码,当 TableView 中的一个单元格被选中时加载:
//Design of Header
let account = UIImage(named: "header_account")
let accountView = UIImageView(image: account)
let back = UIImage(named: "header_backarrow")
let backView = UIImageView(image: back)
navigationItem.leftBarButtonItem?.customView = backView
navigationItem.rightBarButtonItem?.customView = accountView
理论上,所有内容都应替换为此处编写的代码和视图控制器属性中列出的标题(这适用于除第一个视图控制器之外的所有视图控制器。)我将所有这些都直接从 Apple 网页中删除:@987654321 @
以下是我引用的确切段落:
左项:
如果新的顶级视图控制器有一个自定义的左栏按钮项,则显示该项。要指定自定义左栏按钮项,请设置视图控制器导航项的 leftBarButtonItem 属性。
中间项目:
如果没有设置自定义标题视图,导航栏会显示一个包含视图控制器默认标题的标签。这个标签的字符串通常是从视图控制器本身的标题属性中获得的。如果要显示与视图控制器关联的标题不同的标题,请设置视图控制器导航项的标题属性。
正确的项目:
如果新的顶级视图控制器具有自定义右栏按钮项,则显示该项。要指定自定义右栏按钮项,请设置视图控制器导航项的 rightBarButtonItem 属性。
有人知道如何解决这个问题吗?谢谢。
【问题讨论】:
-
正确的方法是在视图控制器的
viewDidLoad中设置例如self.navigationItem.leftBarButtonItem = ...。然后当视图控制器显示在导航控制器中时,导航栏会自动显示视图控制器的导航项。
标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem