2011-10-17 4 views
13

私は、タブバーに背景画像を配置する簡単なコードを用意しています。カスタムUITabBar背景画像がiOS 5以降で動作しない

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

ああ、これが機能していません...誰もが解決策を提供することはできますか?

答えて

37

iOS5はUIAppearanceプロキシを提供しています。

また、iOSバージョンではなく機能(この場合はrespondsToSelector)に基づいてコードを切り替えるのがベストプラクティスです。これは脆弱な仮定です(誰が将来変更しないか)。あなたはちょうどそのインスタンスのためにそれを設定したり、グローバルすべてのタブ・バーのためにできる

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

bryanmacが正しいがあります。コードをバージョンコードに基づいて作成するのではなく、現在のOSに機能が存在するかどうかを調べる方が良い方法です。 – awDemo

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

魅力的な作品!楽しい。

+0

ありがとう、私のために働いて、両方のiphone 4とiPhone5のこの機能を設定しました。 – ravinder521986

10
//---- 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

私はこれは私が私と同じ問題を持っていた他の人のためにこれを掲示しています、解決されている実感。私はタブバーの選択されたタブに背景画像を追加したいと思っていました。

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

ここで2番目の行は、タブバーの選択したタブに背景イメージを追加します。

+0

最もシンプルなソリューションはしばしば最高ですが、素晴らしい作品です! – Emil

-1

のiOS 5で何か新しい forBarMetrics:UIBarMetricsDefault

Here is the apple doc on that

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

関連する問題