ネイティブiPhoneアプリケーションでナビゲーションバーに背景画像を表示したり、ナビゲーションバーに色合いを付けたりするにはどうすればよいですか?
7 に答える
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/
これが私が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画像でも機能します。
一週間前にこれを探していました。ここの議論でこれを見つけました。りんご。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];
バーに変更を加えた後。
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
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/
背景画像にはもう少し手間がかかります(バー自体と同じサイズのtitleViewを設定してみてください。私自身は試していません)、または既存のサブビューの背後にビューを追加します。色合いの色は簡単です:navBar.tintColor = [UIColor orangeColor];
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である必要があります。
レイヤーのフレームを移動しようとすると、すべてのボタンがその中を移動します。