web-dev-qa-db-ja.com

iPhoneのナビゲーションバーに背景画像を追加するには?

画像の背景をナビゲーションバーに追加したい。

正しいですか?

//set custom background image
UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NavigationBackground.png"]];
[self.navigationBar insertSubview:backgroundView atIndex:0];
[backgroundView release];
32
Momi

上記の link @luvieereのコードを次に示します。このコードを@implementation rootviewControllerのすぐ上のrootviewコントローラーに貼り付けます

@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed:@"NavigationBar.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

IOS 5では、これを行う公式の方法があります。 ( iOS Developer Library を参照)

// someplace where you create the UINavigationController
if ([navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
    UIImage *image = [UIImage imageNamed:@"NavigationBar.png"];
    [navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}

それでも、iOS 4以下を本当に捨てたくない限り、下位互換性のために古いコードを保持してください。

98
iwat

あなたのコードだけではそれができません。それが機能するためにはカテゴリを書く必要があります。あなたがそれをするべき方法に関して2つのアプローチがあります:最初の方法はあなたのUINavigationBarのサブビューを作り、あなたのUIViewControllerのそれぞれのviewDidAppear 方法。ただし、これは正しいUIBarButtonItemをカバーする際にいくつかの問題があることが報告されています。他の方法はオーバーライドを伴います

- (void)drawRect:(CGRect)rect

そこに画像を描画します。これらは両方とも このブログ の議論で広範囲にカバーされています。

32
luvieere

最も簡単な方法は、UINavigationBarレイヤーのコンテンツを設定することです。

NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"mybgimage" ofType:@"png"];
[nBar.layer setContents: (id)[UIImage imageWithContentsOfFile: barBgPath].CGImage];

欠点は、ボタンが適切な色合いから生成されないことですが、ナビゲーションバーの色をbg画像に最も近い色に設定できるため、色合いに注意する必要があります。

9
drunknbass

ios5では、AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [application setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
    UIImage *navBarBackgroundImage = [UIImage imageNamed:@"nav_bg"];
    [[UINavigationBar appearance] setBackgroundImage:navBarBackgroundImage forBarMetrics:UIBarMetricsDefault];
    return YES;
}
8
jianpx

私は次のようにappdelegateでこれを行います

+ (void)Generalstyle {
    //navigationbar
    UINavigationBar *navigationBar = [UINavigationBar appearance];
    [navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation.png"] forBarMetrics:UIBarMetricsDefault];

}

そして

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

    [[self class] Generalstyle];

}

.hファイル:

+ (void) Generalstyle;
8
Blazer

これはiOS 6および7で正常に動作します

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

IPhone 5が来たら、両方のデバイスタイプを設定する必要があります。だからこれを使う

if([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
//iOS 5 new UINavigationBar custom background
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbg_ForiPhone5_Imagename.png"] forBarMetrics: UIBarMetricsDefault];
} else {
[self.navigationController.navigationBar insertSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbg_ForOtherIphone_Imagename.png"]] atIndex:0];
}

詳細はこちらをご覧ください link

2

Swiftバージョン

let navBar = UINavigationBar.appearance();
navBar.setBackgroundImage(UIImage(named: "yourImageName"), forBarMetrics: .Default)

更新済みSwift 3.2

let navBar = UINavigationBar.appearance();
        navBar.setBackgroundImage(UIImage(named: "yourImageName"), for: .default)
1
Babul Prabhakar

UINavigationBarクラスを拡張するカテゴリを追加し、カテゴリ内のdrawRect:メソッドをオーバーライドすることもできます。

0
nduplessis

ナビゲーションバーの背景画像を追加するときは、その寸法に注意する必要があります。さまざまな画面サイズに合わせて、次の寸法を確認してください。

1) background.png => 20x44
2) [email protected] => 640x88 // iPhone5およびRetinaデバイスに使用
[email protected] => 1334x18 // iPhone6で使用

次のコードを使用して、背景画像を追加し、ナビゲーションバーの背景画像のタイル表示を回避します。

[self.navigationController.navigationBar setBackgroundImage:[[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault];
0
Aamir

AppDelegateクラスでこのコードを試して、ナビゲーションバーに画像を表示してください。それはあなたをたくさん助けます。

[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"headerImg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault];
0

私がしたことは、私が望む画像でUIImageを作成し、このようにナビゲーションバーに追加しただけです。

UIImage *image = [UIImage imageNamed:@"yourImage.png"];

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