27

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

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

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

4

5 回答 5

48

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

于 2011-10-21T15:27:46.107 回答
35

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

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

要实现这一点,请查看此处iOS 4.3 到 iOS 5.0 API 差异 并搜索“UINavigationBar.h”

或仔细查看这里的新方法签名 setBackgroundImage:forBarMetrics:

这里也是UIBarMetrics枚举类型

希望这可以帮助。

于 2011-06-14T12:51:37.253 回答
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]; 

    }
于 2011-10-15T22:57:49.463 回答
3

此方法没有文档记录,它依赖于 UIToolbar 的特定子视图结构,可以从一个版本更改为另一个版本。所以这正是iOS5版本可能发生的事情

PS如果您检查更新的 UIToolBar 类参考,您会找到另一种自定义 UIToolBar 的方法

于 2011-06-08T18:38:58.997 回答
0

这与 Simone 的答案相同,但适用于 iOS 5 和 iOS < 5。这就是我在应用程序中使用的。您需要[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
于 2011-11-30T01:01:49.073 回答