无法为标签栏设置背景图片

Posted

技术标签:

【中文标题】无法为标签栏设置背景图片【英文标题】:Cannot set background image for tabbar 【发布时间】:2012-01-25 10:28:25 【问题描述】:

我无法在标签栏上设置背景图片。我已经升级到 ios5 和 Xcode 4.2,并且标签栏背景图像刚刚停止工作。

标签栏只出现在我的 RootViewController 上。

我设法使用 Interface Builder 并应用了一种背景颜色,这不是我想要的,但现在我会这样做。由于某种原因,这只适用于 iOS5。理想情况下,我想以编程方式进行。我正在尝试使以下代码正常工作:

RootViewController.h

@interface RootViewController : UIViewController 

    IBOutlet UITabBar *mainTabBar;
    IBOutlet UITabBarItem *settingsBarItem;
    IBOutlet UITabBarItem *infoBarItem;
    IBOutlet UITabBarItem *aboutBarItem;



@property (retain,nonatomic) UITabBar *mainTabBar;

@end

RootViewController.m

-(void)viewDidLoad 

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"smallMenuBackground.png"]]; 
        if ([mainTabBar respondsToSelect:@selector(setBackgroundImage:)])
            mainTabBar.backgroundImage = imageView;
        
        else
            CGRect frame = CGRectMake(0, 0, 480, 49);
            UIView *v = [[UIView alloc] initWithFrame:frame];
            UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
            UIColor *c = [[UIColor alloc] initWithPatternImage:i];
            v.backgroundColor = c;
            [c release];
            [mainTabBar insertSubview:v atIndex:0]; 
            [v release];
        

这段代码对我不起作用,我一定是做错了什么,所以感谢任何帮助。

我也收到了几条警告消息:

1) 未找到实例方法'-respondToSelect:'(返回类型默认为'id')

2) 从 'UIImageView *' 分配给 'UIImage *' 的指针类型不兼容

编辑

整个代码太大,这里粘贴不上,RootViewController.h 是http://pastie.org/3249124,RootViewController.m 是http://pastie.org/3249137

【问题讨论】:

看起来与此类似的问题 - ***.com/questions/7800474/… 我可以帮助你解决第二个警告,你应该为这一行分配一个图像 mainTabBar.backgroundImage = imageView; ,也许试试 mainTabBar.backgroundImage = [UIImage imageNamed:@"smallMenuBackground.png"]; 所有,请参阅以下帖子以解决问题。 ***.com/questions/8909379/… 答案请看以下链接:***.com/questions/8909379/… 【参考方案1】:

这一行,不应该是这样

if ([mainTabBar respondsToSelector:@selector(setBackgroundImage:)])

respondsToSelector: 不是respondsToSelect:

还有,正如它所说的那样,

mainTabBar.backgroundImage = imageView;

应该是

mainTabBar.backgroundImage = [UIImage imageNamed:@"smallMenuBackground.png"];

因为backgroundImageUIImage 而你的imageViewUIImageView

编辑

另外,我发现你的 else 语句中的代码有点奇怪,试试这是否有效。

else

    UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
    UIImageView* imageView = [UIImageView alloc] initWithImage:i];
    [mainTabBar insertSubview:imageView atIndex:0]; 
    [imageView release];

编辑 2:

    if ([mainTabBar respondsToSelect:@selector(setTintColor:)])
    
        UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
        UIColor* c = [[UIColor alloc] initWithPatternImage:i];
        mainTabBar.tintColor = c;
    
    else
    
        CGRect frame = CGRectMake(0, 0, 480, 49);
        UIView *v = [[UIView alloc] initWithFrame:frame];
        UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
        UIColor *c = [[UIColor alloc] initWithPatternImage:i];
        v.backgroundColor = c;
        [c release];
        [mainTabBar insertSubview:v atIndex:0]; 
        [v release];
    

【讨论】:

感谢 X Slash,它消除了警告,但我仍然遇到背景图像未按预期显示的问题。 哎呀,抱歉,我只是假设您的代码(逻辑)正常工作,但存在语法错误。 感谢 X Slash,仍然没有运气,这没有用。我已经编辑了我的原始帖子以链接到完整的代码列表。 对不起,我希望最后一点对你有用,如果没有,我没有什么可以提供给你了 嗨,我想将图像设置为 tabBar 图标...图像是彩色图像...我该怎么做,如果图像是黑白的,那么我没有任何问题,但它用彩色图像制造问题【参考方案2】:

你有一个小问题,你在 mainTabBar.backgroundImage 中传递 imageview 它是磨损的,你将传递 UIImage ...请检查此代码

-(void)viewDidLoad 
            if ([mainTabBar respondsToSelect:@selector(setBackgroundImage:)])
                mainTabBar.backgroundImage =  [UIImage imageNamed:@"smallMenuBackground.png"] ;
            
            else
                CGRect frame = CGRectMake(0, 0, 480, 49);
                UIView *v = [[UIView alloc] initWithFrame:frame];
                UIImage *i = [UIImage imageNamed:@"smallMenuBackground.png"];
                UIColor *c = [[UIColor alloc] initWithPatternImage:i];
                v.backgroundColor = c;
                [c release];
                [mainTabBar insertSubview:v atIndex:0]; 
                [v release];
            
    

【讨论】:

我已经编辑了带有完整代码列表链接的原始帖子。 [mainTabBar insertSubview:imageView atIndex:0];此代码替换为 [mainTabBar insertSubview:imageView atIndex:0];

以上是关于无法为标签栏设置背景图片的主要内容,如果未能解决你的问题,请参考以下文章

自定义标签栏背景图片太大

R语言ggplot2可视化分面图(facet_grid)自定义设置分面图标签栏的背景色(默认背景色为灰色)

CSSCSS 背景设置 ⑧ ( 背景设置案例 | 导航栏按钮 )

如何在 OSX 上设置 Qt 的标签栏背景样式

更改选项卡式视图栏颜色 SwiftUI

标签栏项目未显示在情节提要中