8

iOS7 では、特定の背景画像が設定されている場合、戻るボタンの項目が表示されないという問題が発生しています。

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 で戻るボタンを完全に変更すると、戻るスワイプが無効になるため、これはオプションではありません。

私が間違っていることは何ですか?

ご検討いただきありがとうございます。

4

2 に答える 2

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 の動作が維持されます。
  • 私は満足しています!
于 2013-10-08T02:54:34.307 に答える
3

View Controllerでこれを呼び出していないことを確認してください:

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

iOS 7 では、これによりナビゲーション バーが着色されますが、ボタンが非表示になりますが、説明どおりに機能します。

于 2013-12-31T16:39:45.580 に答える