昨天下载了IOS5 SDK,我用来将我的UIToolbar背景设置为自定义图像的代码停止工作。如果我将目标设置为IOS4.3及以下,它仍然有效。
[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0];
有人在IOS 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