2013-04-27 109 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 
}