Пользовательское фоновое изображение на 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