Ответ 1
Вы можете использовать: [[UIToolBar appearance] setBackgroundImage:toolBarIMG
forBarMetrics:UIBarMetricsDefault];
(новый в iOS 5)
Скачан IOS5 SDK вчера, и этот код, который я использую для установки фона UIToolbar на пользовательское изображение, перестает работать. Если я установил цель в IOS4.3 и ниже, она все равно работает.
[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0];
Кто-нибудь столкнулся с этим еще в IOS 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];
}
Этот метод не документирован и зависит от конкретной структуры subviews UIToolbar, которая может быть изменена с версии на версию. Итак, что именно произошло с выпуском iOS5
P.S. Если вы проверили обновленную ссылку UIToolBar class, вы найдете другой способ настройки UIToolBar
Это по той же линии, что и 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