2013-04-27 75 views
15

我想在我的UINavigationBar的设置后退按钮这一形象:设置导航栏后退按钮图像

enter image description here

我不想让图像嵌入标准的后退按钮图像中,我只想要这个图像出现。

我知道从看着,我可以使用其他问题:

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

设置后退按钮的背景图像。但是这会导致图像被拉伸,而且就我所知,这幅图像并不适合被拉伸。

有没有一种方法可以将我的图像替换回按钮图像?

我支持iOS 5.0及更高版本。

回答

5

从文档为UIBarButtonItem setBackButtonBackgroundImage:forState:barMetrics:

对于良好的效果,将backgroundImage必须是可伸缩的图像。

因此,使其具有伸缩性。即指定图像的哪些部分可以拉伸,更重要的是,哪些部分不能拉伸。 在你的情况下,这将是图像的边缘(不包含箭头的部分)。

UIImage resizableImageWithCapInsets:

另一种方法是提供一个数字图像的(一个用于每个条度量),它是一个尺寸意味着它不会需要被缩放的。 raywenderlich user-interface-customization。但是你仍然想要使图像具有伸缩性,以便能够控制发生的情况。

如果找不到适用的拉伸规格,则回退位置是为每个视图控制器的每个实例创建一个模板后退按钮项目,并将其设置为其导航项目的backBarButtonItem

+0

感谢您的回复和文档的链接。我熟悉制作可拉伸的图像,但是从图像中可以看出,如果水平拉伸,图像看起来不会很好。我想知道是否可以替换按钮图像,而不是仅设置背景图像。 – Darren 2013-04-27 17:01:59

+0

在创建可拉伸图像时,您可以指定哪些部件未拉伸。您只需设置包含箭头的图像部分未被拉伸,并且其周围的边缘是。 – Wain 2013-04-27 17:05:03

+0

哦,我明白了,对不起,我误解了你的答案。但是有可能不能拉伸图像的中心,并允许边缘伸展吗?我认为resizableImageWithCapInsets允许你设置图像的边缘不会被拉伸。我怎样才能创建一个图像的边缘是可拉伸的,但中心不是? – Darren 2013-04-27 17:15:11

39

由于iOS 7+,您应该使用backIndicatorImage属性UINavigationBar来设置您的自定义指标图像。你也需要提供backIndicatorTransitionMaskImage(你可以使用相同的图像)。

斯威夫特

UINavigationBar.appearance().backIndicatorImage = UIImage(named: "back-button-image") 
UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(named: "back-button-image") 

Objective-C的

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"back-button-image"]]; 
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back-button-image"]]; 
+0

感谢您的更新信息。 – Darren 2013-10-10 19:59:30

2

SWIFT版本: -

self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "[email protected]") 
    self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "[email protected]") 
    self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: nil, action: nil) 

把这个在viewDidLoad中()

1

对于斯威夫特3

在viewDidLoad中粘贴此

let backBtn = UIBarButtonItem() 
let image: UIImage = UIImage(named: "your_image_name")! 
backBtn.image = image 
backBtn.action = #selector(popSelf) 
backBtn.target = self 
navigationItem.leftBarButtonItem = backBtn 

创建下面的函数,

func popSelf() { 
    navigationController?.popViewController(animated: true) 
    // do your stuff if you needed 
}