wake-up-neo.net

Wie füge ich ein Hintergrundbild auf der iPhone-Navigationsleiste hinzu?

Ich möchte meiner Navigationsleiste einen Bildhintergrund hinzufügen.

Ist es richtig?

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

Hier ist der Code aus der Datei link @luvieere . Fügen Sie diesen Code in den Rootview-Controller direkt oberhalb von @implementation rootviewController ein.

@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

Ab iOS 5 gibt es einen offiziellen Weg, dies zu tun. (siehe 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];
}

Behalten Sie jedoch den alten Code für die Abwärtskompatibilität bei, es sei denn, Sie möchten iOS 4 und darunter wirklich aufgeben.

98
iwat

Am einfachsten ist es, den Inhalt der UINavigationBar-Ebene festzulegen.

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

Der Nachteil ist, dass die Schaltflächen nicht mit der richtigen Tönung erzeugt werden. Sie können jedoch die Farbe der Navigationsleiste auf diejenige einstellen, die Ihrem bg-Bild am nächsten kommt, und die Tönung sollte berücksichtigt werden.

9
drunknbass

in ios5 habe ich das Hintergrundbild der Navigationsleiste (für alle Navigationsleistenbilder) in AppDelegate.m festgelegt:

- (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

Ich würde das in der appdelegate sowas machen

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

}

Und in 

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

    [[self class] Generalstyle];

}

.h Datei:

+ (void) Generalstyle;
8
Blazer

Dieses funktioniert gut in iOS 6 und 7 

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

Wenn das iPhone 5 kommt, müssen wir beide Gerätetypen einstellen. Verwenden Sie dies also

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

Für weitere Informationen gehen Sie zu diesem link

2

Swift-Version

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

Aktualisierte Swift 3.2

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

Sie können auch eine Kategorie hinzufügen, die die UINavigationBar-Klasse erweitert, und die drawRect: -Methode in der Kategorie überschreiben.

0
nduplessis

Beim Hinzufügen des Hintergrundbilds für die Navigationsleiste sollten Sie sehr genau auf die Abmessungen achten. Bitte stellen Sie sicher, dass Sie die folgenden Abmessungen für verschiedene Bildschirmgrößen haben.

1) background.png => 320x44
2) [email protected] => 640x88 // wird für iPhone5 und für Retina-Geräte verwendet
3) [email protected] => 1334x183 // wird für iPhone6 ​​verwendet 

Verwenden Sie den folgenden Code, um ein Hintergrundbild hinzuzufügen und um zu vermeiden, dass das Hintergrundbild der Navigationsleiste gekachelt wird.

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

Verwenden Sie diesen Code in Ihrer AppDelegate-Klasse, um ein Bild in der Navigationsleiste anzuzeigen. Es wird dir viel helfen. 

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

was ich gemacht habe, war gerade eine UIImage mit dem gewünschten Bild erstellt und in die Navigationsleiste eingefügt. 

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

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