设置导航栏后退按钮图像

时间:2013-04-27 16:31:49

标签: ios uibarbuttonitem uinavigationitem uiappearance

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

enter image description here

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

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

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

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

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

我支持iOS 5.0及更高版本。

4 个答案:

答案 0 :(得分:46)

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

答案 1 :(得分:5)

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

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

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

UIImage resizableImageWithCapInsets:

另一种方法是提供许多图像(每个条形度量标准一个),其大小意味着它不需要缩放。 raywenderlich user-interface-customization。但是你仍然希望使图像可以伸缩,这样你就能控制发生的事情。

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

答案 2 :(得分:4)

swift版本: -

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

答案 3 :(得分:0)

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