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

时间:2018-02-28 01:31:32

标签: ios swift xcode uiimage uinavigationbar

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

此代码神秘地用于在一个视图控制器(收藏夹视图控制器,左上角)上的导航栏的 center 中设置图标,这是一个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。我不确定这是不是问题,但我也无法弄清楚如何关闭它。我已将导航控制器中导航栏中的视图色调颜色更改为透明,以及关闭不透明度。都没有奏效。

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

1 个答案:

答案 0 :(得分:3)

请找到以下解决方案。

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

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

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

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

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

如有任何疑问,请与我联系。