Пользовательское фоновое изображение UITabBar не работает в iOS 5 и более поздних версиях
У меня есть простой фрагмент кода, который помещает фоновое изображение на tabBar.
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabBG.png"]];
[self.tabBarController.tabBar insertSubview:imageView atIndex:0];
[imageView release];
Это отлично работает в iOS 4, но при тестировании в iOS 5 это не работает.
Я пытаюсь сделать следующее:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabBG.png"]];
NSString *reqSysVer = @"4.3";
NSString *iOSVersion = [[UIDevice currentDevice] systemVersion];
if ([iOSVersion compare:reqSysVer options:NSNumericSearch] !=NSOrderedDescending) {
// code for iOS 4.3 or below
[self.tabBarController.tabBar insertSubView:imageView atIndex:0];
}
else {
// code for iOS 5
[self.tabBarController.tabBar insertSubView:imageView atIndex:1];
}
[imageView release];
Увы, это не работает... Может ли кто-нибудь предложить решение?
Ответы
Ответ 1
iOS5 предлагает прокси-сервер UIAppearance.
Кроме того, лучше всего переключить свой код на основе возможностей (в этом случае он отвечаетSoSelector) вместо версии iOS - что хрупкое предположение (кто скажет, что это не изменится в будущем).
Вы можете установить его только для этого экземпляра или глобально для всех панелей вкладок:
// not supported on iOS4
UITabBar *tabBar = [tabController tabBar];
if ([tabBar respondsToSelector:@selector(setBackgroundImage:)])
{
// set it just for this instance
[tabBar setBackgroundImage:[UIImage imageNamed:@"tabbar_brn.jpg"]];
// set for all
// [[UITabBar appearance] setBackgroundImage: ...
}
else
{
// ios 4 code here
}
Ответ 2
//---- For providing background image to tabbar
UITabBar *tabBar = [tabBarController tabBar];
if ([tabBar respondsToSelector:@selector(setBackgroundImage:)])
{
// ios 5 code here
[tabBar setBackgroundImage:[UIImage imageNamed:@"PB_MD_footer_navBg_v2.png"]];
}
else
{
// ios 4 code here
CGRect frame = CGRectMake(0, 0, 480, 49);
UIView *tabbg_view = [[UIView alloc] initWithFrame:frame];
UIImage *tabbag_image = [UIImage imageNamed:@"PB_MD_footer_navBg_v2.png"];
UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image];
tabbg_view.backgroundColor = tabbg_color;
[tabBar insertSubview:tabbg_view atIndex:0];
}
Ответ 3
После просмотра различных статей я нашел ответ для тех, у кого была такая же проблема:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabBG.png"]];
if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) {
//iOS 5
[self.tabBarController.tabBar insertSubview:imageView atIndex:1];
}
else {
//iOS 4.whatever and below
[self.tabBarController.tabBar insertSubview:imageView atIndex:0];
}
[imageView release];
Работает как шарм! Наслаждайтесь.
Ответ 4
Я понимаю, что это было решено, я публикую это для других, у кого была такая же проблема, как и я. Я хотел добавить фоновое изображение на выбранную вкладку на вкладке. Вот решение:
[[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tabbar.png"]];
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar-item.png"]];
Вторая строка добавляет фоновое изображение к выбранной вкладке на вкладке.
Ответ 5
В iOS 5 есть что-то новое
forBarMetrics:UIBarMetricsDefault
Вот яблочный документ на этом
[[UINavigationBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault];