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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Swift中的导航栏中设置图像相关的知识,希望对你有一定的参考价值。

我想在整个应用程序的导航栏右侧放置一个图标。这到处都是主屏幕(虽然它也很好,因为我将它隐藏在该视图控制器上):顶部的表视图控制器,以及图像最右侧的地图视图和表视图控制器下面。

此代码神秘地用于在一个视图控制器(收藏夹视图控制器,左上角)上的导航栏中心设置图标,这是一个tableview控制器,从嵌入在导航控制器中的UIViewController进行控制:

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

enter image description here

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

enter image description here

这个代码在SO上被高度推荐,但是当我尝试它时没有结果(我的动作设置为nil,因为我不需要它做任何事情):

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

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

enter image description here

实例地址0x7fa8b7b10aa0是一个UIVisualEffectSubView。我不确定这是不是问题,但我也无法弄清楚如何关闭它。我已将导航控制器中导航栏中的视图色调颜色更改为透明,以及关闭不透明度。都没有奏效。

如何才能显示导航栏右侧的图像?

答案

请找到以下解决方案。

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

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

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

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

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

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

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

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

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

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

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

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

在 iOS 7 中设置导航栏图像