在 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.navigationController
的navigationItem
上设置它,而应该在UIViewController
的navigationItem
上设置它。
模拟器版本 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()
请移除 UITabbarController 的 UINavigationController 内部,初始 UINavigationController 将处理整个应用程序中的所有导航。
如有任何疑问,请告诉我。
【讨论】:
嗯。对我来说似乎什么都没有出现? @Pigpocket 你能分享你的代码吗?并希望每个 ViewController 都是 UINavigationController 的孩子 当然可以,但具体如何?我的代码和你的一模一样,除了这一行,我需要标注类型: let item = UIBarButtonItem(image: UIImage(named: "Yelp_trademark_RGB_outline") 能否请您调试并确认该方法是否被调用?或者你是否得到物品 让我们continue this discussion in chat。以上是关于在 Swift 的导航栏中设置图像的主要内容,如果未能解决你的问题,请参考以下文章