昨天下载了 IOS5 SDK,我用来将 UIToolbar 的背景设置为自定义图像的这段代码停止工作。如果我将目标设置为 IOS4.3 及以下,它仍然有效。
[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0];
有人在IOS 5上遇到过这个吗?
您可以使用: [[UIToolBar appearance] setBackgroundImage:toolBarIMG
forBarMetrics:UIBarMetricsDefault];
(iOS 5 中的新功能)
假设你链接了 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枚举类型
希望这可以帮助。
这适用于我的工具栏:
//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];
}
此方法没有文档记录,它依赖于 UIToolbar 的特定子视图结构,可以从一个版本更改为另一个版本。所以这正是iOS5版本可能发生的事情
PS如果您检查更新的 UIToolBar 类参考,您会找到另一种自定义 UIToolBar 的方法
这与 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