rightBarButtonItem 图像未显示

Posted

技术标签:

【中文标题】rightBarButtonItem 图像未显示【英文标题】:rightBarButtonItem image not showing up 【发布时间】:2017-04-12 09:38:33 【问题描述】:

谁能帮我理解我的代码有什么问题。我没有得到它,我的代码编译得很好,没有任何错误,但我的图像没有显示出来。我确信我的图像存在于 Assests 文件夹中,并且我也给出了我的图像的正确名称。我正在以编程方式进行操作。以下是我的代码-:

*AppDelegate-:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
        // Override point for customization after application launch.
        windowLayout()
        application.statusBarStyle = .lightContent
        return true
    

    func windowLayout()
    
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()

        let layout = UICollectionViewFlowLayout()
        window?.rootViewController = UINavigationController(rootViewController: HomeController(collectionViewLayout: layout))
        UINavigationBar.appearance().barTintColor = UIColor(colorLiteralRed: 238/255, green: 32/255, blue: 31/255, alpha: 1)
        let statusBarView = UIView()
        statusBarView.backgroundColor = UIColor(colorLiteralRed: 194/255, green: 31/255, blue: 31/255, alpha: 1)
        window?.addSubview(statusBarView)
        window?.translatesAutoresizingMaskIntoConstraints = false
        //window?.addConstraintsWithFormat(format: "H:|[v0]|", views: statusBarView)
        //window?.addConstraintsWithFormat(format: "V:|[v0(20)]", views: statusBarView)
        UINavigationBar.appearance().shadowImage = UIImage()
        //UINavigationBar.appearance().setBackgroundImage(UIImage(),forBarMatrics: .default)
    

扩展文件-:

import UIKit


protocol navigationBarItems 
    func searchBarButton()
    func handleMoreButton()



extension UINavigationController:navigationBarItems

    func handleMoreButton() 

    

    func searchBarButton()
    
        let searchBarImage = UIImage(named: "search-icon")?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
        let searchImage = UIBarButtonItem(image: searchBarImage, style: UIBarButtonItemStyle.done, target: self, action: #selector(handleSearch))
        navigationItem.rightBarButtonItem = searchImage

    

    func handleSearch()
    
        print("123")
    


控制器类-:

class HomeController: UICollectionViewController,UICollectionViewDelegateFlowLayout 

    override func viewDidLoad() 
        super.viewDidLoad()
        setUpLayout()
        setUpMenuBar()
        fetchJsonData()
        navigationController?.searchBarButton()
    

我已经通过设置断点来检查我的函数是否被调用进行了测试。它工作正常,但图像没有显示请帮助。

【问题讨论】:

【参考方案1】:

尝试扩展 UIViewController 而不是 UINavigationController

extension UIViewController:navigationBarItems

    func handleMoreButton() 

    

    func searchBarButton()
    
        let searchBarImage = UIImage(named: "search-icon")?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
        let searchImage = UIBarButtonItem(image: searchBarImage, style: UIBarButtonItemStyle.done, target: self, action: #selector(handleSearch))
        navigationItem.rightBarButtonItem = searchImage

    

    func handleSearch()
    
        print("123")
    


现在从`viewDidLoad`调用这个方法

class HomeController: UICollectionViewController,UICollectionViewDelegateFlowLayout 

    override func viewDidLoad() 
        super.viewDidLoad()
        setUpLayout()
        setUpMenuBar()
        fetchJsonData()
        self.searchBarButton()
    

【讨论】:

@Nirva D 谢谢它的工作。但是为什么扩展 UINavigationController 不起作用?

以上是关于rightBarButtonItem 图像未显示的主要内容,如果未能解决你的问题,请参考以下文章

rightBarButtonItem.enabled 从 uinavigationbar 中删除我的自定义层

RightBarButtonItem 未出现在导航栏中

self.navigationItem.rightBarButtonItem = 按钮不起作用?

rightbarbuttonitem 不显示

UINavigationController rightbarbuttonitem没有显示

rightBarButtonItem 出现在中间