设置导航栏后退按钮图片

Posted

技术标签:

【中文标题】设置导航栏后退按钮图片【英文标题】:Setting navigation bar back button image 【发布时间】:2013-04-27 16:31:48 【问题描述】:

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

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

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

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

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

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

我支持 ios 5.0 及更高版本。

【问题讨论】:

【参考方案1】:

从 iOS 7+ 开始,您应该使用 UINavigationBarbackIndicatorImage 属性来设置您的自定义指标图像。您还需要提供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"]];

【讨论】:

【参考方案2】:

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

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

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

UIImage resizableImageWithCapInsets:

另一种方法是提供多个图像(每个条形度量一个),这些图像的大小意味着不需要缩放。 raywenderlich user-interface-customization。但是您仍然希望使图像可拉伸,以便控制发生的情况。

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

【讨论】:

感谢您的回复和文档链接。我熟悉制作可拉伸的图像,但你可以从我的图像中看到,如果水平拉伸它看起来会不好。我想知道我是否可以替换按钮图像,而不仅仅是设置背景图像。 在创建可拉伸图像时,您可以指定哪些部分被拉伸,哪些部分未被拉伸。您只需要设置包含箭头的图像部分不被拉伸,并且它周围的边缘被拉伸。 哦,我明白了,对不起,我看错了你的答案。但是是否可以不拉伸图像的中心,并允许拉伸边缘?我认为 resizableImageWithCapInsets 允许您设置不会被拉伸的图像边缘。如何创建边缘可拉伸但中心不可拉伸的图像? 我也可以更仔细地阅读 :-) 您可以设置拉伸以将箭头视为图像的“角落”部分,但您获得的偏移量可能看起来不太好,具体取决于尺寸原件的长度以及拉伸的程度。 好的,谢谢。你的回答和我的想法差不多,但我想确认一下。【参考方案3】:

快速版本:-

    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() 中

【讨论】:

【参考方案4】:

对于 Swift 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

【讨论】:

以上是关于设置导航栏后退按钮图片的主要内容,如果未能解决你的问题,请参考以下文章

如何设置导航栏的后退项

更改后退导航栏按钮的字体

IOS应用导航栏后退按钮

无法更改导航栏后退按钮的背景图像[重复]

iPhone - 设置应用程序宽导航栏后退按钮,不带文字

导航栏标题和后退按钮名称相同吗?