自定义UITabBar背景图像在iOS 5及更高版本中无效

awD*_*emo 13 iphone cocoa-touch objective-c ipad ios

我有一段简单的代码,可以在tabBar上放置背景图像.

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabBG.png"]];
[self.tabBarController.tabBar insertSubview:imageView atIndex:0];
[imageView release];
Run Code Online (Sandbox Code Playgroud)

这在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];
Run Code Online (Sandbox Code Playgroud)

唉,这不行......有人能提供解决方案吗?

bry*_*mac 37

iOS5提供UIAppearance Proxy.

此外,最佳做法是根据功能(在这种情况下,它是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
}
Run Code Online (Sandbox Code Playgroud)

  • bryanmac是对的.您不应将代码基于版本代码,而应查明当前操作系统中是否存在某个功能是解决此问题的更好方法. (2认同)

Gau*_*rav 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];

}
Run Code Online (Sandbox Code Playgroud)