6

ネイティブiPhoneアプリケーションでナビゲーションバーに背景画像を表示したり、ナビゲーションバーに色合いを付けたりするにはどうすればよいですか?

4

7 に答える 7

10

iOS5の場合、次のコード行を使用します。

UINavigationBar *navBar = [[self navigationController] navigationBar];
UIImage *backgroundImage = [UIImage imageNamed:@"nav-bar-background-normal"];
[navBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];

下位互換性のために、ナビゲーションバーがsetBackgroundImage:forBarMetricsに応答するかどうかを確認してください。

詳細情報: http ://sebastiancelis.com/2009/12/21/adding-background-image-uinavigationbar/

于 2011-11-03T22:50:57.510 に答える
8

これが私がiOS4でした方法です:

#import <QuartzCore/QuartzCore.h> // For .layer 

self.navigationController.navigationBar.layer.contents = (id)[UIImage imageNamed:@"navigationBarBackgroundImage"].CGImage;
self.navigationController.navigationBar.tintColor = [UIColor orangeColor];

サブビューをzオーダー(-exchangeSubviewAtIndex:withSubviewAtIndex :)間で切り替える必要はなく、背景画像とtintColorの両方が1行のコードで設定され、@2x画像でも機能します。

于 2010-10-26T18:32:12.203 に答える
6

一週間前にこれを探していました。ここの議論でこれを見つけました。りんご。com / thread.jspa?threadID = 1649012&tstart = 0(申し訳ありませんが実際のリンクを投稿できません)。

-(void)setBackgroundImage:(UIImage*)image withTag:(NSInteger)bgTag{
if(image == NULL){ //might be called with NULL argument
    return;
}
UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:image];
aTabBarBackground.frame = CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
aTabBarBackground.tag = bgTag;
[self addSubview:aTabBarBackground];
[self sendSubviewToBack:aTabBarBackground];
[aTabBarBackground release];
}
/* input: The tag you chose to identify the view */
-(void)resetBackground:(NSInteger)bgTag {
    [self sendSubviewToBack:[self viewWithTag:bgTag]];
}

これをUINavigationBarのカテゴリとして作成しました。UINavigationBarController内のUINavigationBarの背景画像を設定するには、次のようにします。

[navigationControllerForChannels.navigationBar setBackgroundImage:[UIImage imageNamed:@"top_bar.png"] withTag:48151623];

タブバーを更新するときにバグが発生したので、

[self.navigationController.navigationBar resetBackground:48151623];

バーに変更を加えた後。

于 2009-05-23T19:56:49.240 に答える
3

UINavigationBardrawRectをオーバーライドできます。コードはappDelegate.mに配置できます。私はそれをテストし、3xおよび4xiOSで動作しています。

@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
    UIColor *color = [UIColor blackColor]; //tint color
    UIImage *img = [UIImage imageNamed: @"navBarBg.png"]; // your image
    [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    self.tintColor = color;
 }@end
于 2011-03-23T22:03:09.193 に答える
2

iOS5とiOS6の場合、私はこのソリューションを使用しましたが、完全に機能し、ユニバーサルUINavigationBar背景画像を作成しました。

iPhone Retina Portrait 640px x 88px / iPhone Non-Retina Portrait 320px x 44px

AppDelegate.mの内部

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

このコードを配置します

// Set the status bar to black color.
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];

// Change @"menubar.png" to the file name of your image.
UIImage *navBar = [UIImage imageNamed:@"menubar.png"];

[[UINavigationBar appearance] setBackgroundImage:navBar forBarMetrics:UIBarMetricsDefault];

画像名(menubar.png)を変更することを忘れないでください

完全な答えについては、このリンクをチェックしてくださいhttp://www.lwxted.com/blog/2012/add-custom-background-image-uinavigationbar-ios-5/

于 2012-11-19T13:51:48.583 に答える
1

背景画像にはもう少し手間がかかります(バー自体と同じサイズのtitleViewを設定してみてください。私自身は試していません)、または既存のサブビューの背後にビューを追加します。色合いの色は簡単です:navBar.tintColor = [UIColor orangeColor];

于 2009-05-23T15:18:09.667 に答える
0

CGImageソリューションを使用する場合、画像サイズに問題がある可能性があります。

CGRect layer=self.navigationController.navigationBar.frame;
layer.size.height=57.0;
layer.origin.y=0;
self.navigationController.navigationBar.frame=layer;
CGImageRef imageRef         = [UIImage imageNamed:@"myImg.png"].CGImage;
self.navigationController.navigationBar.layer.contents = (id)imageRef;

レイヤーの高さが44.0ピクセルであるため、画像が引き伸ばされているように見えますが、UINavigationBarの背景画像は少なくとも57.0である必要があります。

レイヤーのフレームを移動しようとすると、すべてのボタンがその中を移動します。

于 2011-06-10T10:18:09.963 に答える