IOS5 SDK中UIToolbar上的自定义背景图像

时间:2011-06-08 18:34:33

标签: uitoolbar ios5

昨天下载了IOS5 SDK,我用来将我的UIToolbar背景设置为自定义图像的代码停止工作。如果我将目标设置为IOS4.3及以下,它仍然有效。

[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0];

有人在IOS 5上遇到过这个问题吗?

5 个答案:

答案 0 :(得分:49)

您可以使用:[[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault];(iOS 5中新增功能)

答案 1 :(得分:35)

假设你链接了iOS5 beta SDK,你可以做这样的事情

if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
        //iOS 5 new UINavigationBar custom background
        [navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault];
} 

要实现这一点, 看看这里iOS 4.3 to iOS 5.0 API Differences 并搜索“UINavigationBar.h”

或仔细查看此处的新方法签名 setBackgroundImage:forBarMetrics:

此处还有UIBarMetrics枚举类型

希望这有帮助。

答案 2 :(得分:10)

这在我的工具栏上有效:

//toolBar background image set based on iOS version
    [[UIDevice currentDevice] systemVersion];

    if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) {

        //iOS 5
        UIImage *toolBarIMG = [UIImage imageNamed: @"toolBar_brown.png"];  

        if ([toolBar respondsToSelector:@selector(setBackgroundImage:forToolbarPosition:barMetrics:)]) { 
            [toolBar setBackgroundImage:toolBarIMG forToolbarPosition:0 barMetrics:0]; 
        }

    } else {

        //iOS 4
        [toolBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toolBar_brown.png"]] autorelease] atIndex:0]; 

    }

答案 3 :(得分:3)

此方法未记录,并依赖于UIToolbar的特定子视图结构,可以在不同版本之间进行更改。这就是iOS5发布时可能发生的事情

P.S。如果您查看更新的UIToolBar class参考,您将找到另一种自定义UIToolBar的方法

答案 4 :(得分:0)

这与Simone的答案一致,但适用于iOS 5和iOS<这就是我在app中使用的内容。您需要在应用初始化的某个地方调用[UINavigationBar setupIos5PlusNavBarImage](applicationDidFinishLaunching:是一个很好的候选者)。在iOS 5+上,setupIos5PlusNavBarImage将使用新的UIAppearance协议来设置背景,并且将忽略drawRect覆盖。在iOS< 5,setupIos5PlusNavBarImage基本上是一个无操作,drawRect将处理绘制图像。

接口:

@interface UINavigationBar (CustomNavigationBar)

+ (void) setupIos5PlusNavBarImage;

- (void) drawRect: (CGRect) rect;

@end

实现:

@implementation UINavigationBar (CustomNavigationBar)

+ (void) setupIos5PlusNavBarImage
{
    if ([UINavigationBar respondsToSelector: @selector(appearance)])
    {
        [[UINavigationBar appearance] setBackgroundImage: [UIImage imageNamed: @"menuBar.png"] forBarMetrics: UIBarMetricsDefault];
    }
}

- (void) drawRect: (CGRect) rect
{
    UIImage* img = [UIImage imageNamed: @"menuBar.png"];
    [img drawInRect: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end