下载IOS5 SDK昨天,该代码停止工作。如果我将目标设置为IOS4.3及更低版本,它仍然有效。自定义背景图片在IOS5 SDK
[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0];
有人在iOS 5上遇到过这个问题吗?
下载IOS5 SDK昨天,该代码停止工作。如果我将目标设置为IOS4.3及更低版本,它仍然有效。自定义背景图片在IOS5 SDK
[self.bizToolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbar-iphone.png"]] autorelease] atIndex:0];
有人在iOS 5上遇到过这个问题吗?
您可以使用:[[UIToolBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault];
(新iOS 5中)
此方法未记录,并依赖于UIToolbar的特定子视图的结构可以从版本更改为版本。所以这正是可能与iOS5的发生释放
附:如果检查更新UIToolBar class参考,你会发现另一种方式来定制UIToolBar
Validmir感谢指针。我会检查文档。我现在就试过了,它适用于所有IOS版本。 @interface WoodenToolbar:UIToolbar {} - (无效)的drawRect:(的CGRect)RECT; @end @implementation WoodenToolbar - (无效)的drawRect:(的CGRect)RECT { 的UIImage *图像= [UIImage的imageNamed:@ “Navbar的iphone.png”]; [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; } @end – StackThis 2011-06-08 18:47:57
假设你的iOS5链接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枚举类型
希望这有助于。
非常感谢!这工作完美 – shabbirv 2011-08-04 15:51:38
这个工作我的工具栏上:
//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];
}
没有必要检查系统版本(这通常不是一个好的做法),因为'-respondsToSelector'检查应该足以确定是否使用新方法或旧方法来做到这一点。 – 2011-11-17 17:51:39
ios5运行良好,但ios 4没有响应。我该怎么办? – Hiren 2012-03-19 10:29:36
这是在同一直线上的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
iOS5的是保密协议,所以我觉得你可以讨论它在苹果的专用论坛唯一 – Vladimir 2011-06-08 18:36:18