wake-up-neo.com

Hintergrundbild der UINavigationBar ändern

Ich habe versucht, das Hintergrundbild der UINavigationBar meiner Anwendung zu ändern. Ich habe mehrere Möglichkeiten ausprobiert. Zuerst habe ich meiner AppDelegate-Klasse den folgenden Code hinzugefügt:

@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

Aber es hat nicht funktioniert. Mein nächster Versuch war, eine CustomizedNavigationBar-Klasse zu schreiben, die die Methode drawRect überschreibt. Es sah so aus:

CustomizedNavigationBar.h

#import <UIKit/UIKit.h>

@interface CustomizedNavigationBar : UINavigationBar

@end

CustomizedNavigationBar.m

#import "CustomizedNavigationBar.h"

@implementation CustomizedNavigationBar

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

    NSLog(@"I got called!!!!!");
}

@end

In meiner .xib-Datei, in der die Navigationsleiste definiert ist, habe ich die Klasse in die neue CustomizedNavigationBar geändert. Aber es funktioniert immer noch nicht ..

Als weiteren Test habe ich ein Beispielprojekt heruntergeladen, bei dem das Hintergrundbild geändert werden soll. Aber selbst mit diesem Beispielcode hat es nicht funktioniert. 

Was mache ich falsch? Ich verwende IOS 5. Irgendwelche Vorschläge oder andere Möglichkeiten, ein Hintergrundbild zu definieren?

Danke für deine Antworten!

22
Prine

Ab iOS 5 sollten Sie die Methode -setBackgroundImage:forBarMetrics: verwenden:

[myNavbar setBackgroundImage:[UIImage imageNamed: @"UINavigationBarBackground.png"] 
               forBarMetrics:UIBarMetricsDefault];

Und in Swift 4 :

navigationBar.setBackgroundImage(UIImage(named: "UINavigationBarBackground.png"),
               for: .default)
77
Craz

Betrachtet man alle iOS-Versionen, so scheint dies sowohl ein benutzerdefiniertes Hintergrundbild als auch eine benutzerdefinierte Größe von UINavigationBar zu erreichen:

@interface CustomNavigationBar : UINavigationBar
@end

@implementation CustomNavigationBar
-(void) drawRect:(CGRect)rect 
{
    UIImage *image = [UIImage imageNamed: @"navigationBar"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];

    //for iOS5
    [self setBackgroundImage:[UIImage imageNamed: @"navigationBar"] forBarMetrics:UIBarMetricsDefault];
}

//for custom size of the UINavigationBar
- (CGSize)sizeThatFits:(CGSize)size {
    CGSize newSize = CGSizeMake(320,31);
    return newSize;
}

@end

Ich benutze solche Codes an einem gemeinsamen Ort wie einer Utilities-Datei.

Hoffe das hilft.

8
theunexpected1

Versuchen Sie es einfach mit diesem Code. In Ihrer Implementierungsdatei (.m).

#import "RootViewController.h"

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

@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;

    [email protected]"You are Done.";
}

Das hat für mich hervorragend funktioniert.

Code oben nur für IOS 4. Wenn Sie IOS 5 verwenden, verwenden Sie .....

 [myNavbar setBackgroundImage:[UIImage imageNamed:
 @"UINavigationBarBackground.png"] 
                    forBarMetrics:UIBarMetricsDefault];
1
Ajay Sharma

Nun, für iOS 4 gibt es eine einfache Lösung wie:

nvc.navigationBar.layer.contents = (id)img.CGImage;
0
Pavel Sich

Sie können dies auch für den Navigationsleistenhintergrund versuchen.

UINavigationBar *navigationBar = self.navigationController.navigationBar;
UIImage *image = [UIImage imageNamed: @"NavBar-Wood.png"];
[navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault];
self.navigationController.navigationBar.tintColor = [UIColor brownColor];

Vielen Dank.

0

Eine weitere Möglichkeit, ein Bild in der Navigationsleiste festzulegen, ist 

UIImage* logo = [ UIImage imageNamed:@"Logo.png" ];
UIImageView* logoView = [[[UIImageView alloc] initWithImage:logo] autorelease];
self.navigationItem.titleView = logoView;

Der gesamte Hintergrund der Navigationsleiste wird dadurch nicht geändert. Fügt jedoch ein in der Navigationsleiste zentriertes Hintergrundbild hinzu, das manchmal mehr beabsichtigt ist (wonach ich gesucht habe). 

0
karim

Sie können UIImageview wie folgt zur Navigationsleiste hinzufügen. UINavigationBar navBar = [[UINavigationBar Allocation] init]; [NavBar addSubview: imageview]; [Navbar release];

Sie können den Beitrag überprüfen: iPhone - NavigationBar Benutzerdefinierter Hintergrund

0
Minakshi