7

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];
4

6 に答える 6

6

どちらの画面方向モードでも、使用する方がはるかに優れています

[navigationController.navigationBar insertSubview:imgView atIndex:0];

これにより、画像ビューが他のすべてのビューの下に配置され、すべてのデフォルトのナビゲーション バー要素 (タイトル、標準ボタン) が正常に機能します。

于 2009-04-28T05:52:35.627 に答える
6

少しの調査と試行錯誤の後、ムービー再生モードに入ったときにナビゲーションバーを置き換えない回避策を見つけました。これによりアプリの承認に問題が発生しないことを願っていますが、この投稿に基づいて、問題ないと思います。

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
于 2010-01-10T21:54:33.443 に答える
1

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);
}

また、UINavigationBarの外観のカスタマイズに関するこの完全なデモXcodeプロジェクトが役立つ場合があります。また、iPhone4デバイスでRetinaディスプレイをサポートするための@2xバージョンの背景画像も含まれています。

于 2011-02-13T10:04:57.487 に答える
1

ベンが提供した解決策は問題を解決しましたが、横向きモードで画像を引き伸ばします。最終的に、2 つの画像を作成しました。1 つは横向きモード用、もう 1 つは縦向きモード用です。次に、shouldAutoRotate にコードを追加して、向きに基づいてナビゲーション バーの画像を変更しました。

于 2008-12-24T14:34:16.823 に答える
0

[UIImage imageNamed:@"navbar_landscape.png"]ljonesATL が示すように、UI 要素はまさにimageNamed:が意図したものであるため、より単純な方法を試してください。

于 2010-01-20T16:31:42.860 に答える