Пользовательское фоновое изображение на UIToolbar в IOS5 SDK - PullRequest
27 голосов
/ 08 июня 2011

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

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

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

Ответы [ 5 ]

49 голосов
/ 21 октября 2011

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

35 голосов
/ 14 июня 2011

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

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

Чтобы понять это, посмотрите здесь Различия API от iOS 4.3 до iOS 5.0 и найдите"UINavigationBar.h"

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

Также вот перечисление UIBarMetrics введите

Надеюсь, это поможет.

10 голосов
/ 16 октября 2011

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

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

    }
3 голосов
/ 08 июня 2011

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

PS Если вы проверите обновленную ссылку UIToolBar class , вы найдете другой способ настройки UIToolBar

0 голосов
/ 30 ноября 2011

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

Интерфейс:

@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
...