Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Предположим, что вы связали 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 тип перечисления

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

Ответ 3

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

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

    }

Ответ 4

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

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

Ответ 5

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

Интерфейс:

@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