在 Swift 的导航栏中设置图像

Posted

技术标签:

【中文标题】在 Swift 的导航栏中设置图像【英文标题】:Set Image In Navigation Bar In Swift 【发布时间】:2018-02-28 01:31:32 【问题描述】:

我正在尝试在整个应用中的导航栏的右侧放置一个图标。这是除了主屏幕之外的任何地方(尽管在那里也可以,因为我将它隐藏在那个视图控制器上):顶部的表格视图控制器,以及图像最右侧的地图视图和表格视图控制器下面。

这段代码神秘地用于在一个视图控制器(收藏夹视图控制器,左上角)上的导航栏的 center 中设置图标,这是一个 tableview 控制器,与 UIViewController 分离,即嵌入导航控制器:

let yelpIcon = UIBarButtonItem(image: UIImage(named: "Yelp_trademark_RGB_outline"), style: .plain, target: self, action: nil)
self.navigationController!.navigationItem.rightBarButtonItem  = yelpIcon

我的 Map 和 TableViewControllers(最右边)嵌入在导航控制器中,每个控制器都嵌入在标签栏控制器中。我无法通过在 Interface Builder 中创建导航项并设置其图像或以编程方式显示图像。

强烈建议在 SO 上使用此代码,但在我尝试时没有结果(我将操作设置为 nil,因为我不需要它来做任何事情):

let button1 = UIBarButtonItem(image: UIImage(named: "myimage"), style: .plain, target: self, action: Selector("action"))
self.navigationItem.rightBarButtonItem = button1

注意:导航栏采用黑色 barTintColor 进行风格化,这应该没什么区别,但我想我会分享。图片是我的资产文件夹中的 PNG。在使用调试视图层次结构时,我遇到了这两个层,它们似乎阻止了我的图像出现(尽管它们没有使用后退按钮执行此操作)。

实例地址 0x7fa8b7b10aa0 是一个 UIVisualEffectSubView。我不确定这是否是问题所在,但我也不知道如何将其关闭。我已将嵌入它的导航控制器上的导航栏中的视图色调更改为透明,并关闭不透明度。都没有奏效。

如何让导航栏右侧的图像出现?

【问题讨论】:

嗨,你能指定你在哪个 ios 上运行它,以及你正在使用什么 swift 版本。还要告诉您希望图标显示这些UIViewControllers 中的哪一个。另一个是你不应该在self.navigationControllernavigationItem上设置它,而应该在UIViewControllernavigationItem上设置它。 模拟器版本 10、Swift 4、iOS 11.1、XCode 9.2 你的意思是,iPhone X、iOS 11.1 和 XCode 9.2 还是什么?没有 Swift 11.1 是的,我立即纠正了这一点。请刷新 我还编辑了我最初的评论,你能回答我添加的内容吗? 【参考方案1】:

请找到以下解决方案。

像这样创建 UIViewController 的扩展和方法,

extension UIViewController 
    func setNavigationItem() 
        let imageView = UIImageView(image: UIImage(named: "yelp"))
        let item = UIBarButtonItem(customView: imageView)
        self.navigationItem.rightBarButtonItem = item
    

对于那些要在其中显示 rightBarButton 项的 ViewController,在 viewDidLoad() 方法中添加以下行,

override func viewDidLoad() 
    super.viewDidLoad()
    self.setNavigationItem()

请移除 UITabbarControllerUINavigationController 内部,初始 UINavigationController 将处理整个应用程序中的所有导航。

如有任何疑问,请告诉我。

【讨论】:

嗯。对我来说似乎什么都没有出现? @Pigpocket 你能分享你的代码吗?并希望每个 ViewController 都是 UINavigationController 的孩子 当然可以,但具体如何?我的代码和你的一模一样,除了这一行,我需要标注类型: let item = UIBarButtonItem(image: UIImage(named: "Yelp_trademark_RGB_outline") 能否请您调试并确认该方法是否被调用?或者你是否得到物品 让我们continue this discussion in chat。

以上是关于在 Swift 的导航栏中设置图像的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift iOS 8 中设置透明导航栏和状态栏的图像底图

在Swift中的导航栏中设置图像

如何在导航栏swift ui中设置左右按钮(前导/尾随)?

如何在 Swift 中设置导航栏的标题? [复制]

无法在导航栏中设置完整图像

如何在 Swift 的标签栏项目中设置图像?