風景モードでUINavigationBarのカスタム背景
-
22-08-2019 - |
質問
私はUINavigationBarのカスタム背景を追加しています。それは限り電話がポートレートモードであるとして、正常に動作します。すぐに私は風景モードに切り替えると、半分バーは青(デフォルトのナビゲーションバーの色)が表示され、それの半分は私のイメージを持っている。
私は風景モード用の画像を伸ばし、ポートレートモードのために再びそれを小さくする方法を教えてください。
おかげ
の のソリューションのの
包み誰もがナビゲーションバーに画像を追加する方法への答えを探している - ここに
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 480.0, 44.0)];
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"navbar_landscape" ofType:@"png"]]];
[navigationController.navigationBar addSubview:imgView];
[imgView release];
解決
あなたはおそらく、あなたの背景画像ビューのautoresizingMaskを設定する必要があります。 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
を使用してみてください。
他のヒント
両方の画面の向きモードでは、
を使用して多くの方が良いでしょう[navigationController.navigationBar insertSubview:imgView atIndex:0];
これは、他のすべてのビューと、すべてのデフォルトのナビゲーションバーの要素(タイトル、標準ボタン)下の画像表示がOKに動作します。
研究と試行錯誤のビットの後、私はあなたがムービー再生モードに入ったときにナビゲーションバーを交換しないだろうこと、周りの仕事を見つけました。 Hopeefullyこれはアプリの承認に問題が発生することはありませんが、この記事に基づいて、私はそれは問題ないはずだと思います:
http://developer.apple.com/iphone/library /qa/qa2009/qa1637.htmlする
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
if([self isMemberOfClass: [UINavigationBar class]]){
UIImage *image = [UIImage imageNamed:@"navBarBackground.png"];
CGContextClip(ctx);
CGContextTranslateCTM(ctx, 0, image.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextDrawImage(ctx, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
}else{
[super drawLayer:layer inContext:ctx];
}
}
@end
ベンが与えた解決策は、問題を解決しましたが、それは風景モードで画像を伸ばし。私はポートレートモード用の2つのimages-風景用とその他を作成することになりました。私は、姿勢に基づいてナビゲーションバーの画像を変更するshouldAutoRotateのコードを追加
はそのUINavigationバーインスタンスのフレームサイズをチェックすることによって、異なる方向に異なる画像を供給することによって、両方の縦と横方向のために画像を変更することができます:
- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
if ([self isMemberOfClass:[UINavigationBar class]] == NO) {
return;
}
UIImage *image = (self.frame.size.width > 320) ?
[UINavigationBar bgImageLandscape] : [UINavigationBar bgImagePortrait];
CGContextClip(context);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
}
とこの完全なデモのXcode UINavigationBarの外観をカスタマイズ上のプロジェクトには役に立つかもしれません。また、iPhone 4のデバイス上の網膜ディスプレイをサポートするために、背景画像の2倍のバージョン@含まれます。
[UIImage imageNamed:@"navbar_landscape.png"]
の簡単な方法を試してみてください