下載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