2012-08-16 45 views
3

我已經設置了圖像作爲我的應用程序中使用外觀屬性的所有導航欄後退按鈕的背景圖像。我使用applicationDidLoad方法中的以下代碼執行此操作。iPhone - 設置應用程序的寬導航欄後退按鈕,無文字

UIImage *backButton = [UIImage imageNamed:@"btn-nav-back"]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButton forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

我的問題是,每當出現後退按鈕的圖像被拉伸,由於前一個視圖被設置爲返回按鈕的標題名稱。是否有系統廣泛的方式可以阻止標題被設置?也試圖後退按鈕的標題設置爲空,在實際視圖控制器沒有效果:(

[self.navigationItem.backBarButtonItem setTitle:@""]; 

回答

2
UIBarButtonItem *customItem = [[[UIBarButtonItem alloc] initWithCustomView:plainButton] autorelease]; 
self.navigationItem.leftBarButtonItem = customItem; 
[(UIButton*)self.navigationItem.leftBarButtonItem.customView addTarget:self.navigationController action:@selector(popViewControllerAnimated:) forControlEvents:UIControlEventTouchUpInside]; 

創建一個自定義barButtonItem並將其交換爲默認後退按鈕。

+0

感謝BabyPanda,但我希望能夠將其設置爲系統範圍,而不僅僅是每個視圖。 – bennythemink 2012-08-16 07:31:16

+0

通過「系統級」,如果你的意思是設定所有的viewControllers,那麼你可以做出這樣'的UIViewController + CustomNavigation'類別和執行類中的方法' - (空)setLeftBarButtonItem:(UIButton的*)plainButton;在' viewControllers – BabyPanda 2012-08-16 08:01:36

+0

Hey BabyPanda,這就是我正在做的,但我只是想知道是否有一種方法來使用導航欄的外觀屬性。我真的不喜歡爲每個班級導入和調用類別,希望可能有一個「更乾淨」的方式來做到這一點 – bennythemink 2012-08-20 04:00:59

1

如果您需要與默認的BackBarButton圖片相同的外觀,您只需在不使用背板按鈕圖像的情況下執行此操作即可。在導航到其他控制器之前,請先寫下以下行:

UIBarButtonItem *backButton = [[[UIBarButtonItem alloc] 
     initWithTitle:@"Back" 
       style:UIBarButtonItemStyleBordered 
      target:nil 
      action:nil] autorelease]; 
    [[viewcontroller navigationItem] setBackBarButtonItem:backButton]; 

這將解決您的問題。此外,您可以使用另一種方法barButton根據需要更改圖像。 如果您發現任何問題或者您在尋找其他問題,請讓我知道。

+0

謝謝圖蘭但是我希望能夠設置系統範圍而不僅僅是每個視圖。 – bennythemink 2012-08-16 07:30:55

9

我找到了一種方法來實現你想要的。

首先要讓你的後背圖像可調整大小,因此它不會被拉伸以後退按鈕的長度:

UIImage* backImage = [[UIImage imageNamed:@"back"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 20, 0, 0)]; 

通過UIAppearance設置此圖片爲backButtonBackgroundImage:

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

末,招標題出可見區域:

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000) forBarMetrics:UIBarMetricsDefault]; 

唯一的缺點是,那個e backButton的寬度不會更改,以便您的標題可以偏離中心。

+0

感謝您的更新前:) – bennythemink 2013-05-28 06:45:08

1

我得到了周圍的方式,它是:

UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Normal) 

這適用於iOS 8

1

我知道這是舊的文章,但如果我曾經碰到過職,必須有其他人也尋找它。

只需添加到斯蒂芬的答案:這使文本白色正常和選定狀態。這使得系統只有2條線。然而,圖像佔據了白色文字的空間,看起來相當糟糕。

對於全系統的返回按鈕,您使用的代碼從上面

UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Normal) 
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.clearColor()], forState: UIControlState.Highlighted) 
+0

這個作品,但唯一的問題是,它影響**所有**'UIBarButtonItems',而不僅僅是後退按鈕。 – Sid 2015-08-14 02:08:07

0

斯威夫特3.X

加入這一行的AppDelegate文件
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)