2

UIAppearance を使用して、ナビゲーション バー、タブ バー、uibarbuttonitem などの要素をカスタマイズしています。UIBarButtonItem 要素の非常に奇妙な動作を除けば、非常にうまく機能します。ナビゲーション コントローラー階層の最上位ではすべて問題ないように見えますが、次のビュー コントローラーを押すと、UIBarButtonItem 要素が少し下に移動しますが、同時に戻るボタンは正しい位置にとどまります。問題を説明するために2つの画像を添付しました。

1) ナビゲーション コントローラー階層の最初のビュー コントローラー

ここに画像の説明を入力

2) ナビゲーション コントローラー階層の 2 番目のビュー コントローラー

ここに画像の説明を入力

編集:コード

    //Change navigation bar appearance
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"GPNavigationBarBackground.png"] forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
    [[UINavigationBar appearance] setShadowImage:[UIImage imageNamed:@"GPNavigationBarShadow.png"]];

    [[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIColor whiteColor], UITextAttributeTextColor,
      [UIFont boldSystemFontOfSize:17], UITextAttributeFont,nil]];
    [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:2.f forBarMetrics:UIBarMetricsDefault];

    UIImage *buttonBackground = [[UIImage imageNamed:@"GPNavigationBarButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];
    UIImage *buttonPressedBackground = [[UIImage imageNamed:@"GPNavigationBarButtonPressed.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];

    UIImage *backButtonBackground = [[UIImage imageNamed:@"GPNavigationBarBackButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 10)];
    UIImage *backButtonPressedBackground = [[UIImage imageNamed:@"GPNavigationBarBackButtonPressed.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 10)];

    [[UIBarButtonItem appearance] setBackgroundImage:buttonBackground forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundImage:buttonPressedBackground forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonBackground forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonPressedBackground forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

    [[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment:1.f forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundVerticalPositionAdjustment:1.f forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, 1.f) forBarMetrics:UIBarMetricsDefault];
4

1 に答える 1

5

さて、その問題について考えた後、私は最終的にそれを解決しました。上記のコードは完全に正しいです。唯一の問題は、UIBarButtonItem の背景画像の高さでした。UIAppearance プロキシを使用すると、すべてのグラフィックを設定できますが、UIBarButtonItem の高さを変更することはできません。

そのため、UIBarButtonItem をカスタマイズするときは、UIBarButtonItem が 30pt を超えてはならないことに常に注意してください。つまり、カスタム アートワークはこのサイズを超えてはなりません。

30pt を超える背景画像を設定できますが、上記と同じ問題が発生します。

于 2013-01-14T21:14:16.357 に答える