ランドスケープiPhoneのuibarbuttonitemの高さ
-
30-09-2019 - |
質問
iPhoneアプリには、カスタムuibarbuttonitemsが含まれているNAVバーがあります。
UIBarButtonItem* homePersonButton = [[UIBarButtonItem alloc]
initWithImage:[UIImage imageNamed:@"homePerson.png"]
style:UIBarButtonItemStylePlain
target:self action:@selector(showHomePerson)];
homeperson.pngは20 x 18です。
ポートレートモードではよく見えますが、ランドスケープモードでは、ボタンの20x18の画像が高すぎて見栄えが良くなります。 iOSは、標準のボタンでいくつかの作業を行い、より薄いナビゲーションバーにあるときに必要に応じて画像を縮小するようにしているようです。
これを処理するための最良の方法は何ですか?
別の例は、NAVバーのタイトルビューにカスタムボタンがある場合です。アプリが回転したときにも縮小する必要があります。
あらゆるポインターを前もってありがとうあなたは私に与えることができます!
解決
ツールバーとナビゲーションバーの画像のサイズは20 x 20です。その場合、これらの次元を満たしていない画像を提供している場合、フレームワークに任せて問題を引き起こす画像を変更/スケーリングするために、フレームワークに任せます。画像を20x20にサイズ変更/スケーリングすると、肖像画と風景の両方で画像が正しく見えるはずです。
他のヒント
Stipeteはコメントでこれについて言及しましたが、私はそれが今答えである必要があると感じています。 iOS 5の時点で、を使用できます uibarbuttonitem initializer:
- initWithImage:landscapeImagePhone:style:target:action:
設定するだけです landscapeImagePhone
画像への画像は、風景にサイズを変更したい画像の画像です。
いくつかのテストの後、私はiPhoneがナビゲーションバーを縮小し、したがってナビゲーションバーのuibarbuttonitemsを縮小していることに気付きましたが、iPhone 6 Plus ではない. 。 6 Plusはナビゲーションバーを44pxの高さに保持しているようですが、通常のiPhoneは32pxまで縮小します。このため、6プラスも ではない 使用 landscapeImagePhone
風景で。
より小さなサイズの画像を使用するだけでなく、これをテストしました landscapeImagePhone
, 、しかし、まったく異なる画像。 6 Plusで画像が変更されることはありません。
ただし、iPhone 6 PlusのiOS 9.2の以下に注意してください。
この初期化のためのAppleドキュメント それを述べています landscapeImagePhone
は:
UiuserInterfaceDiomPhone Idiomのランドスケープバーのアイテムに使用される画像。
iOS 9.2の時点で、6 Plusは UIUserInterfaceIdiomPhone
肖像画と風景の両方で。以前は、6 Plusがかつてでした UIUserInterfaceIdiomUnspecified
. 。いつ更新されたのか正確にはわかりません。しかし、今だからです UIUserInterfaceIdiomPhone
, 、ドキュメントによると、 landscapeImagePhone
6 Plusにも適用する必要があります。
したがって、ナビゲーションバーの高さと同じくらい、uiuserinterfacediomにあまり依存しないかもしれません。はっきりとはわからない。この矛盾は将来的に「固定」される可能性があるため、異なる動作を引き起こす可能性があることに注意してください。
同様の問題があります。これで、カスタムタイプをボタンに使用します。たとえば、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;
}
次に、回転時にバーボタンカスタムビューフレームを調整できます。
ヒント:
- 回転法では、例えば
willAnimateRotationToInterfaceOrientation
, 、ナビゲーションバーボタンアイテムのカスタムビューフレームを印刷し、必要な正しいフレーム(プロトレーブモード)を取得します。また、ランドスケープモードでフレームが間違っていることがわかります。修正する必要があります。 - 正しいフレーム値を参照して、ランドスケープバーボタンフレームの問題を修正します。
私の場合、私はカスタムビューの起源を簡単に修正するだけです...例
// 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です。