Пользовательский фоновый рисунок UITabBar не работает в iOS 5 и более поздних версиях - PullRequest
13 голосов
/ 18 октября 2011

У меня есть простой фрагмент кода, который помещает фоновое изображение на панель вкладок.

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

Увы, это не работает ... Кто-нибудь может предложить решение?

Ответы [ 5 ]

37 голосов
/ 18 октября 2011

iOS5 предлагает прокси-сервер UIAppearance.

Кроме того, рекомендуется переключать код в зависимости от его возможностей (в данном случае - RespondsToSelector) вместо версии 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
}
10 голосов
/ 03 февраля 2012
//---- 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 голосов
/ 22 сентября 2012

Я понимаю, что это было решено, я публикую это для тех, у кого была такая же проблема, как у меня.Я хотел добавить фоновое изображение на выбранную вкладку в панели вкладок.Вот решение:

[[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tabbar.png"]];
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar-item.png"]];

Вторая строка добавляет фоновое изображение к выбранной вкладке в панели вкладок.

3 голосов
/ 18 октября 2011

После просмотра различных статей я нашел ответ для всех, у кого возникла такая же проблема:

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

Работает как шарм! Наслаждайтесь.

0 голосов
/ 12 марта 2013

В iOS 5 есть что-то новое forBarMetrics:UIBarMetricsDefault

Вот яблочный документ на этом

[[UINavigationBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...