9

iPhoneアプリにカスタムUIBarButtonItemsを含むナビゲーションバーがあります。

UIBarButtonItem* homePersonButton = [[UIBarButtonItem alloc]
       initWithImage:[UIImage imageNamed:@"homePerson.png"]
               style:UIBarButtonItemStylePlain
              target:self action:@selector(showHomePerson)];

homePerson.pngは20x18です。

ポートレートモードでは見栄えがしますが、ランドスケープモードでは、ボタンの20x18の画像が高すぎて見栄えがよくありません。iOSは、画像が細いナビゲーションバーにあるときに、必要に応じて画像を縮小するために、標準のボタンでいくつかの作業を行っているようです。

これを処理するための最良の方法は何ですか?

もう1つの例は、ナビゲーションバーのtitleViewにカスタムボタンがある場合です。アプリが回転するときにも縮小する必要があります。

あなたが私に与えることができるどんなポインタにも前もって感謝します!

4

3 に答える 3

5

ツールバーとナビゲーションバーの画像のサイズは20x20であるため、これらのサイズに合わない画像を提供する場合は、問題の原因となっている画像のサイズ変更/拡大縮小をフレームワークに任せます。画像のサイズを20x20に変更/拡大縮小すると、画像は縦向きと横向きの両方で正しく表示されます。

于 2010-11-09T22:40:40.783 に答える
3

steipeteはコメントでこれについて言及しましたが、私はそれが今答えである必要があるように感じます。iOS 5以降、UIBarButtonItem初期化子を使用できます。

- initWithImage:landscapeImagePhone:style:target:action:

landscapeImagePhone画像を横向きにサイズ変更する画像の小さいバージョンに設定するだけです。

いくつかのテストの後、iPhoneはナビゲーションバーを縮小するため、ナビゲーションバーのUIBarButtonItemsは縮小しますが、iPhone6Plusは縮小しないことに気付きまし。6 Plusはナビゲーションバーを44pxの高さに保つようですが、通常のiPhoneはそれを32pxに縮小します。このため、6Plusはランドスケープでも使用しません。landscapeImagePhone

に小さいサイズの画像を使用するだけlandscapeImagePhoneでなく、まったく異なる画像を使用してこれをテストしました。6Plusでは画像が変更されることはありません。


ただし、iPhone6PlusのiOS9.2以降は次の点に注意してください。

この初期化子に関するAppleのドキュメントには、次のように記載されていlandscapeImagePhoneます。

UIUserInterfaceIdiomPhoneイディオムのランドスケープバーのアイテムに使用される画像。

iOS 9.2の時点で、6PlusはUIUserInterfaceIdiomPhone縦向きと横向きの両方でレポートします。以前は、6PlusはUIUserInterfaceIdiomUnspecifiedでした。それがいつ更新されたのか正確にはわかりません。UIUserInterfaceIdiomPhoneただし、ドキュメントによると、現在はlandscapeImagePhone6Plusにも適用されるはずです。

したがって、ナビゲーションバーの高さほどUIUserInterfaceIdiomに依存していない可能性があります。はっきりとはわからない。この不整合は将来「修正」される可能性があるため、異なる動作が発生する可能性があることに注意してください。

于 2015-07-30T14:30:34.573 に答える
0

同様の問題があります。今、私はボタンにカスタムタイプを使用しています。たとえば、これがUIBarButtonItemのカタログです。これを使用して、カスタムバーボタンを作成できます。

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image highlightedImage:(UIImage *)highlightedImage     target:(id)target action:(SEL)action{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
    button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:button];

    return barItem;
}

次に、回転時にバーボタンのカスタムビューフレームを調整できます。

ヒント:

  1. 回転方法では、たとえば willAnimateRotationToInterfaceOrientation、ナビゲーションバーボタンアイテムのカスタムビューフレームを印刷し、必要な正しいフレームを取得します(protraitモードで)。また、横向きモードではフレームが正しくないことがわかります。修理する。
  2. 正しいフレーム値を参照して、ランドスケープバーボタンのフレームの問題を修正します。

私の場合、カスタムビューの原点を修正するだけです...例:

// adjust the navigation Item top, otherwise it is not proper set after rotation
_centralRootViewController.navigationItem.leftBarButtonItem.customView.top = 5;
_centralRootViewController.navigationItem.rightBarButtonItem.customView.top = 5;

注:上はフレームのyです。

于 2012-04-11T19:58:20.040 に答える