2010-11-30 20 views

cevap

8

Bir UINavigationBar ait rengini değiştirmek için tintColor özelliğini kullanabilirsiniz, ancak örneğin, kendi UINavigationBar alt sınıfı sağlamak gerekecek arka plan olarak bir görüntüyü ayarlamak ve drawRect: yöntemi geçersiz kılmak için:

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

Arabirim Oluşturucu'nuzu kullanıcı arabiriminizi oluşturmak için kullanırsanız ve sonra özel gezinme çubuğunu kullanmak isterseniz, Arabirim Oluşturucu'da UINavigationBar öğesini seçin, Müfettiş'i açın ve Kimlik sekmesinde UINavigationBar alt sınıfınızı sınıf alanında belirtin:

Example screenshot showing custom UINavigationBar subclass

+0

: UINavigationBar+CustomBackground.m olarak kaydet (o UINavigationBar için özel bir kategori ekler)? – Moshe

+0

İyi soru - cevap buna göre değiştirildi. –

+0

Bu sadece kodda mümkün mü? Ayrıca, bu hiç HIG kırdı mı? – Moshe

7

Gezinme çubuğunda bir resme sahip olmak için, kendiniz çizmek zorundasınız, ki bu aslında o kadar da zor değil. Ben UINavigationController içini göstermek için UINavigationBar kurarım nasıl Şimdi

@implementation UINavigationBar (CustomBackground) 

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

@end 
+1

Bir kategori kullanmak, * tüm * gezinme çubuklarının arka planını geri alınamaz şekilde değiştirebilir. Bir alt sınıf kullanarak daha iyisin. –

+0

Farklı görünüm denetleyicilerinde farklı gezinme çubukları istedikçe bu yöntemi kullandık. Daha sonra bu yöntem ne yazık ki başarısız olur –

+0

Aslında millet, sınıf algılaması yapabilir ve sınıfa göre farklı davranabilirsin. Yine de varsayılan davranışları yeniden düzenlemelisiniz. – Moshe