2013-10-07 120 views
8

在iOS7我已經遇到了一個問題,如果它已經被設置了特定的背景圖像返回按鈕的項目將不會顯示:後退按鈕奇怪消失在UINavigationController的,但繼續工作

int imageSize = 21; //REPLACE WITH YOUR IMAGE WIDTH 

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-400.f, 0) 
                forBarMetrics:UIBarMetricsDefault]; 
UIImage *barBackBtnImg = [[UIImage imageNamed:@"BackArrowDark.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, imageSize, 0, 0)]; 

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

在做這個,我在導航控制器中按下的任何ViewController都不會出現後退按鈕項,即使按下它應該出現的位置,它也會顯示出來,並且任何後續的這個視圖控制器的按下操作都會使按鈕出現在屏幕上。

此問題僅在iOS7下出現:在iOS6下一切正常。

使用leftBarButtonItem完全更改後退按鈕會禁用後向滑動,因此這不是選項。

任何想法我做錯了什麼?

非常感謝您的考慮。

回答

14

嘗試不同的解決方案之後,我發現改變backIndicatorImage效果最好iOS7下,它似乎是在與iOS7界面範例行:

[[UINavigationBar appearance] setTintColor:[UIColor grayColor]]; 
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault]; // Takes out title 

UIImage *backButtonImage = [UIImage imageNamed:@"BackArrowDark.png"]; 

if ([UINavigationBar instancesRespondToSelector:@selector(setBackIndicatorImage:)]) { 
    [[UINavigationBar appearance] setBackIndicatorImage:backButtonImage]; 
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backButtonImage]; 
} else { 
    int imageSize = 21; // REPLACE WITH YOUR IMAGE WIDTH 

    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:[backButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, imageSize, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
} 

使用這種方法:

  • 當返回到導航控制器時,後退按鈕項目轉換與默認指示器相同(從iOS6下滑出的後退按鈕)。
  • 在iOS6下,backButton被更改並保持默認的iOS6行爲。
  • 我很高興!
3

確保您不會在視圖控制器調用此:

self.navigationController.navigationBar.tintColor = [UIColor redColor]; 

在iOS系統7,這將着色的導航欄,但也會讓你的按鈕不可見,但功能就像你所描述。

相關問題