Пользовательское фоновое изображение на UIToolbar в iOS5 SDK

вчера загрузил iOS5 SDK, и этот код, который я использую для установки фона моего UIToolbar в пользовательское изображение, перестал работать. Если я установлю цель на IOS4.3 и ниже он все еще работает.

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

кто-нибудь сталкивался с этим еще на IOS 5?

5 ответов


вы можете использовать: [[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault]; (новое в iOS 5)


Предположим, вы связали iOS5 beta SDK, вы могли бы сделать что-то вроде этого

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

чтобы понять это, Взгляните сюда iOS 4.3 для iOS 5.0 API различия и искать "UINavigationBar.h"

или внимательно посмотрите на подпись нового метода здесь setBackgroundImage: forBarMetrics:

и вот это UIBarMetrics перечислимого типа

надеюсь, что это помогает.


это сработало на моей панели инструментов:

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

    }

этот метод не документирован и опирается на определенную структуру подвидов UIToolbar, которая может быть изменена от версии к версии. Так что именно это, вероятно, произошло с выпуском iOS5

P. S. Если вы проверяете обновляется!--3-->класс UIToolBar ссылка вы найдете другой способ настроить UIToolBar


Это примерно то же самое, что и ответ Симоны, но работает для iOS 5 и iOS [UINavigationBar setupIos5PlusNavBarImage] где-то в вашей инициализации приложения (applicationDidFinishLaunching: является хорошим кандидатом). В iOS 5 + setupIos5PlusNavBarImage будет использовать новый протокол UIAppearance для установки фона, а переопределение drawRect будет проигнорировано. В iOS

интерфейс:

@interface UINavigationBar (CustomNavigationBar)

+ (void) setupIos5PlusNavBarImage;

- (void) drawRect: (CGRect) rect;

@end

реализация:

@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