2009-11-07 15 views
32

Resim arka planı eklemek için, gezinme çubuğuna eklemek istiyorumiphone navigation çubuğuna arka plan resmi nasıl eklenir?

Doğru mu?

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

Bu kodları tercih ediyorum çünkü kategoriler kullanım önerilmiyor! Kullanırsanız iyi çalıştığını göreceksiniz. – Steve

cevap

98

@link @luvieere tarafından verilen kod aşağıda belirtilmiştir. sadece iOS 5 gibi @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 

yukarıdaki rootview kontrolöre içine bu kodu yapıştırın Bunu yapmak için resmi bir yolu yoktur. Eğer gerçekten iOS 4 ve aşağıdaki hendek istemedikçe geriye dönük uyumluluk için eski kodu korumak, hala

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

Ama (iOS Developer Library bakınız).

+2

@luvieere için not düşmeyi unutmayın, kredisini hak ediyor. – iwat

0

Ayrıca UINavigationBar sınıfını genişleten bir kategorisi ekleyip drawRect geçersiz olabilir: yöntemini kategorisinde.

+0

böylece kod doğru mu? henüz denemiyorum! : D – Momi

+0

Söylemesi zor. Nerede kullanacaksın? Çubuğun görüntülendiği her zaman arka plan görüntüsü görüntüsünü öne getirmeniz gerekebilir. – nduplessis

32

Yalnızca kodunuz bunu yapmayacak, çalışması için bir kategori yazmanız gerekecek. Yapmanız gereken yolla ilgili iki yaklaşım vardır: ilki, görüntüyü UINavigationBar'unuzun bir alt görünümünün oluşturulması ve UIViewController'un viewDidAppear yönteminizin her birine yeniden getirilmesini içerir. Ancak bu, UIBarButtonItem numaralı hakların ele alınması ile ilgili bazı sorunlara sahip olduğu bildirilmiştir. Diğer yöntem üste

- (void)drawRect:(CGRect)rect

ve orada görüntü düşürme içerir. Bunların her ikisi de kapsamlı bir şekilde this blog tartışmasında kapsanmaktadır.

9

En kolay yol, UINavigationBar katman içeriğinin ayarlanmasıdır.

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

olumsuz düğmeleri doğru tonu kapalı oluşturulmaz ancak bg görüntüye en yakın olan ve tonu halledilir gereken neyse üzere navbar rengini ayarlayabilirsiniz olduğunu. Ben

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

} 

gibi AppDelegate şeyde yapıyoruz Ve

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

    [[self class] Generalstyle]; 

} 

.h dosyasında ediyorum

+0

Bu yöntem çok daha kolay ve çizim için kullanılan resimlerde size daha fazla esneklik sağlar. Sadece bunu denedim ve harika çalışıyor! Sadece 'QuartzCore' kütüphanesini almayı unutmayın. – FreeAsInBeer

+0

Harika çalışıyor, teşekkürler. Kategorilerden uzak durmaya çalışıyorum, onları güvenilmez buldum, bu yüzden bu harika. Proxy görünümünü kullanarak – Chris

8

: iphone 5 ikimiz de cihaz ayarlamak zorunda gelip

+ (void) Generalstyle; 
2

yazın. Yani iOS5 bu link

8

gidin Daha fazla bilgi için bu

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

kullanmak, ben AppDelegate.m (tüm gezinti çubuğu görüntü için) gezinti çubuğu arka plan resmini ayarlayın:

- (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; 
} 
+1

+1 –

0

neyi Ben yaptım görüntü ile bir UIImage oluşturuldu ve bu gibi gezinti çubuğuna eklendi.

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

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

Bu iOS 6'da cezası çalışan bir ve 7

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

Swift versiyon: Swift 3.2 Güncelleme

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

:

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

Navigation Bar arka plan görüntüsünü eklerken, boyutlarına çok dikkat etmelisiniz. Farklı ekran boyutları için aşağıdaki boyutlara sahip olduğunuzdan emin olun.

1) background.png =>320x44
2)
[email protected] =>640x88 // iphone5 ve retina cihazlarda
3) arka @ 3x için kullanılan .png =>1334x183 // iPhone6 ​​için kullanılan

Arka plan resmi eklemek ve Gezinme Çubuğunun arka plan görüntüsünde herhangi bir lekelenmeyi önlemek için aşağıdaki kodu kullanın.

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

Bu kodu, gezinti çubuğunda görüntü göstermek için AppDelegate Sınıfınızda deneyin. Size yardımcı olacaktır.

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