32

ナビゲーション バーに画像の背景を追加したいと考えています。

そうですか?

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

12 に答える 12

98

@luviereが言及したリンクからのコードは次のとおりです。このコードを上記の rootview コントローラーに貼り付けます @implementation rootviewController

@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 開発者ライブラリを参照)

// 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 以前を捨てたくない場合を除き、下位互換性のために古いコードを保持してください。

于 2009-12-04T14:18:57.970 に答える
32

コードだけでは機能しません。機能させるには、カテゴリを作成する必要があります。あなたがそれを行う方法に関して2つのアプローチがありUINavigationBarます. ただし、これは右側のカバーに問題があると報告されています。もう1つの方法には、オーバーライドが含まれますUIViewControllerviewDidAppearUIBarButtonItem

- (void)drawRect:(CGRect)rect

そこにイメージを描きます。これらは両方とも、このブログのディスカッションで広く取り上げられています..

于 2009-11-07T11:56:19.357 に答える
9

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

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

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

于 2010-08-31T19:08:47.083 に答える
8

私は次のような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;
于 2012-07-31T15:51:52.967 に答える
2

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

詳細については、このリンクにアクセスしてください

于 2012-12-19T12:38:43.547 に答える
2

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

UINavigationBar *navBar = [[self navigationController] navigationBar];
  UIImage *backgroundImage = [UIImage imageNamed:@"nav-bar-background-normal"];
  [navBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
于 2014-02-12T12:09:43.870 に答える
1

迅速なバージョン:

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)
于 2016-04-12T20:34:54.273 に答える
0

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

于 2009-11-07T09:08:06.393 に答える
0

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

[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"headerImg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault];
于 2017-03-30T17:02:07.117 に答える