顶级视图控制器

时间:2018-06-11 22:31:00

标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem

我有一个项目,我将TableViewCells推送到不同的View Controllers。在这个项目中,我使用自定义导航控制器。这是第一个视图控制器中导航控制器的代码:

//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

理论上,所有内容都应该替换为此处编写的代码以及View Controller属性中列出的标题(这适用于除第一个之外的所有视图控制器。)我直接从Apple获取所有这些内容网页:https://developer.apple.com/documentation/uikit/uinavigationcontroller

以下是我引用的确切段落:

左项目:

  

如果新的顶级视图控制器具有自定义左栏按钮项,则显示该项。要指定自定义左栏按钮项,请设置视图控制器导航项的leftBarButtonItem属性。

中间项目:

  

如果未设置自定义标题视图,导航栏将显示包含视图控制器默认标题的标签。此标签的字符串通常从视图控制器本身的title属性中获取。如果要显示与视图控制器关联的标题不同的标题,请改为设置视图控制器导航项的title属性。

正确的项目:

  

如果新的顶级视图控制器具有自定义右侧栏按钮项,则会显示该项。要指定自定义右侧栏按钮项,请设置视图控制器导航项的rightBarButtonItem属性。

有人知道如何解决这个问题吗?感谢。

1 个答案:

答案 0 :(得分:1)

您的代码无效,因为在大多数情况下self.noContentViewControllercustomView

如果要将导航项设置为nil,请从图像中创建新的UIImage,然后指定条形按钮项。

例如,来自UIBarButtonItem

UIImage

要从自定义视图创建一个,请使用:

let accountItem = UIBarButtonItem(image: account, style: .plain, target: nil, action: nil)
self.navigationController?.navigationBar.topItem?.rightBarButtonItem = accountItem

请注意,如果let accountItem = UIBarButtonItem(image: imageView) self.navigationController?.navigationBar.topItem?.rightBarButtonItem = accountItem 为零或navigationController为零,则仍可能失败。