17

我想将 UINavigationBar 中的后退按钮设置为此图像:

在此处输入图像描述

我不希望将图像嵌入标准后退按钮图像中,我只想显示此图像。

我通过查看其他可以使用的问题知道:

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

设置后退按钮的背景图像。但这会导致图像被拉伸,据我所知,这个特定的图像不适合被拉伸。

有没有办法可以用我的图像替换后退按钮图像?

我支持 iOS 5.0 及更高版本。

4

4 回答 4

47

从 iOS 7+ 开始,您应该使用backIndicatorImage属性 ofUINavigationBar来设置您的自定义指标图像。您还需要提供backIndicatorTransitionMaskImage(您可以为两者使用相同的图像)。

斯威夫特

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

目标-C

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"back-button-image"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back-button-image"]];
于 2013-10-10T15:00:23.383 回答
5

来自UIBarButtonItem setBackButtonBackgroundImage:forState:barMetrics:的文档:

为了获得良好的效果,backgroundImage 必须是可拉伸的图像。

所以,让它变得可伸缩。即指定图片的哪些部分可以拉伸,更重要的是,哪些部分不能拉伸。在您的情况下,这将是图像的边缘(不包含箭头的部分)。

UIImage resizableImageWithCapInsets:

另一种方法是提供多个图像(每个条形度量一个),其大小意味着不需要缩放。 raywenderlich 用户界面定制。但是您仍然希望使图像可拉伸,以便您可以控制发生的事情。

如果您找不到有效的拉伸规范,您的后备位置是为每个视图控制器的每个实例创建一个模板后退按钮项,并将其设置backBarButtonItem为其导航项的。

于 2013-04-27T16:46:53.320 回答
5

快速版本:-

    self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "HomeLeft@2x")
    self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "HomeLeft@2x")
    self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)

把它放在 viewDidLoad()

于 2015-10-19T09:09:18.663 回答
0

对于斯威夫特 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
}
于 2016-10-18T10:40:54.487 回答