我想在整个应用程序的导航栏右侧放置一个图标。这到处都是主屏幕(虽然它也很好,因为我将它隐藏在该视图控制器上):顶部的表视图控制器,以及图像最右侧的地图视图和表视图控制器下面。
此代码神秘地用于在一个视图控制器(收藏夹视图控制器,左上角)上的导航栏中心设置图标,这是一个tableview控制器,从嵌入在导航控制器中的UIViewController进行控制:
let yelpIcon = UIBarButtonItem(image: UIImage(named: "Yelp_trademark_RGB_outline"), style: .plain, target: self, action: nil)
self.navigationController!.navigationItem.rightBarButtonItem = yelpIcon
My 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。我不确定这是不是问题,但我也无法弄清楚如何关闭它。我已将导航控制器中导航栏中的视图色调颜色更改为透明,以及关闭不透明度。都没有奏效。
如何才能显示导航栏右侧的图像?
请找到以下解决方案。
像这样和方法创建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将处理整个应用程序的所有导航。
如有任何疑问,请告诉我。