Définir des images personnalisées à l'UIBarButtonItem mais il n'affiche aucune image

Je veux définir des images personnalisées à l'UIBarButtonItem mais il montre seulement une boîte rectangular autour et il n'affiche pas l'image réelle.

func setupBrowserToolbar() { let browser = UIToolbar(frame: CGRect(x: 0, y: 20, width: self.view.frame.width, height: 30)) //配置返回组件 let path = NSBundle.mainBundle().pathForResource("back", ofType: "png") let urlstr = NSURL(fileURLWithPath: path!) let data = NSData(contentsOfURL: urlstr) let btnback = UIBarButtonItem(image: UIImage(data: data!), style: UIBarButtonItemStyle.Plain, target: self, action: Selector("backClicked:")) //分割按钮1 let btngrap1 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) //前进按钮 let btnforward = UIBarButtonItem(image: UIImage(named: "forward.png"), style: UIBarButtonItemStyle.Plain, target: self, action: Selector("forwardClicked:")) //分割按钮2 let btngrap2 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) //重新加载 let btnreload = UIBarButtonItem(image: UIImage(named: "reload.png"), style: UIBarButtonItemStyle.Plain, target: self, action: Selector("reloadClicked:")) //分割按钮3 let btngrap3 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) //停止加载 let btnstop = UIBarButtonItem(image: UIImage(named:"stop.png"), style: UIBarButtonItemStyle.Plain, target: self, action: Selector("stopClicked:")) progress = UIProgressView((frame: CGRect(x: 0, y: 48, width: self.view.frame.width-50, height: 2))) progress.progress = 0 browser.setItems([btnback, btngrap1, btnforward, btngrap2, btnreload, btngrap3, btnstop], animated: true) ptimer = NSTimer(timeInterval: 0.2, target: self, selector: Selector("loadProgress"), userInfo: nil, repeats: true) self.view.addSubview(browser) } 

ma capture d'écran de l'application

La méthode ci-dessus est la configuration de la barre d'outils mais je ne sais pas ce qui ne va pas.

C'est parce que le mode de rendu par défaut de l'image UIBarButtonItem dessine toujours l'image comme une image de model, en ignorant ses informations de couleur (UIImageRenderingModeAlwaysTemplate). Créez simplement votre image en utilisant la méthode d'UIImage imageWithRenderingMode toujours originale.

 UIImage(named: "yourImageName")!.imageWithRenderingMode(.AlwaysOriginal) 

Swift 3, 4 mise à jour

À partir de swift 3, la méthode est modifiée au format suivant

 UIImage(named:"yourImageName")!.withRenderingMode(.alwaysOriginal)