2011-06-08 17 views
27

Pobrałem wczoraj pakiet SDK IOS5, a ten kod, którego używam do ustawienia tła UIToolbar dla niestandardowego obrazu, przestał działać. Jeśli ustawię cel na IOS4.3 i poniżej, to nadal działa.Niestandardowy obraz tła na pasku UIToolbar w pakiecie IOS5 SDK

[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0]; 

Ktoś to jeszcze napotkał na IOS 5?

+2

iOS5 jest pod NDA więc myślę, że można dyskutować na dedykowanych forach Apple'a tylko – Vladimir

Odpowiedz

49

Można użyć: [[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault]; (nowego w iOS 5)

+0

To jest genialne, ponieważ starannie ustawia tło dla * wszystkich * twoich pasków nawigacji, nie musisz tego robić dla każdego z nich. Dzięki za wskazanie mi właściwego kierunku. – Chris

+0

Dowolny odpowiednik dla paska narzędzi UIToolbar? – Chris

+59

[[Wygląd UIToolbar] setBackgroundImage: barsBack forToolbarPosition: UIToolbarPositionAny barMetrics: UIBarMetricsDefault] – Chris

3

Ta metoda nie jest udokumentowana i opiera się na specyficznej strukturze subskrybentów UIToolbar, którą można zmienić z wersji na wersję. Tak więc to, co prawdopodobnie stało się z wydaniem iOS5:

P.S. Jeśli zaznaczysz aktualizowane UIToolBar class odniesienie będzie znaleźć inny sposób, aby dostosować UIToolBar

+0

dzięki Validmir dla wskaźnika. Sprawdzę dokumentację. Próbowałem tego na razie i działa on we wszystkich wersjach IOS. @interface WoodenToolbar: UIToolbar {} - (void) drawRect: (CGRect) rect; @end @implementation WoodenToolbar - (void) drawRect (CGRect) rect { UIImage * obraz = [UIImage imageNamed: @ "NavBar-iphone.png"]; [image drawInRect: CGRectMake (0, 0, self.frame.size.width, self.frame.size.height)]; } @end – StackThis

35

Załóżmy, że połączone iOS5 beta SDK, można zrobić coś takiego

if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     //iOS 5 new UINavigationBar custom background 
     [navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault]; 
} 

Aby to zrealizować, przyjrzeć tutaj iOS 4.3 to iOS 5.0 API Differences i wyszukać „UINavigationBar.h”

lub z bliska przyjrzeć się nowej metody podpisu tutaj setBackgroundImage:forBarMetrics:

Również tutaj jest UIBarMetrics enum typ

Mam nadzieję, że to pomaga.

+0

Dziękuję bardzo!To zadziałało doskonale – shabbirv

10

To działało na moim pasku:

//toolBar background image set based on iOS version 
    [[UIDevice currentDevice] systemVersion]; 

    if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) { 

     //iOS 5 
     UIImage *toolBarIMG = [UIImage imageNamed: @"toolBar_brown.png"]; 

     if ([toolBar respondsToSelector:@selector(setBackgroundImage:forToolbarPosition:barMetrics:)]) { 
      [toolBar setBackgroundImage:toolBarIMG forToolbarPosition:0 barMetrics:0]; 
     } 

    } else { 

     //iOS 4 
     [toolBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toolBar_brown.png"]] autorelease] atIndex:0]; 

    } 
+6

Nie ma potrzeby sprawdzania wersji systemu (i na ogół nie jest to dobra praktyka), ponieważ sprawdzenie '-odpowiedniToSelektor' powinno wystarczyć do określenia, czy użyć nowego sposobu, czy też starego sposobu robienia tego. –

+0

ios5 działa dobrze, ale ios 4 nie odpowiada. co powinienem zrobić? – Hiren

0

Jest wzdłuż tej samej linii, co odpowiedź Simone, ale pracuje dla iOS 5 i iOS < 5. To jest to, czego używam w aplikacji. Musisz zadzwonić pod numer [UINavigationBar setupIos5PlusNavBarImage] gdzieś w inicjalizacji aplikacji (applicationDidFinishLaunching: jest dobrym kandydatem). Na iOS 5+ setupIos5PlusNavBarImage użyje nowego protokołu UIAppearance do ustawienia tła, a nadpisanie drawRect zostanie zignorowane. W przypadku iOS < 5, setupIos5PlusNavBarImage będzie w zasadzie operacją "no-op", a drawRect zajmie się rysowaniem obrazu.

Interfejs:

@interface UINavigationBar (CustomNavigationBar) 

+ (void) setupIos5PlusNavBarImage; 

- (void) drawRect: (CGRect) rect; 

@end 

Realizacja:

@implementation UINavigationBar (CustomNavigationBar) 

+ (void) setupIos5PlusNavBarImage 
{ 
    if ([UINavigationBar respondsToSelector: @selector(appearance)]) 
    { 
     [[UINavigationBar appearance] setBackgroundImage: [UIImage imageNamed: @"menuBar.png"] forBarMetrics: UIBarMetricsDefault]; 
    } 
} 

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

@end 
Powiązane problemy