先來點從別人那裡copy過來的。這個串連找不到了。
如果你的問題是因為設定不了UIToolbar的背景色,那麼下面這個連結或者看一下2;裡面的內容就能搞定。
附上連結
1;[[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed:@"toolbarBackgroundImage"] forToolbarPosition:UIToolbarPositionTop barMetrics:UIBarMetricsDefault]
上面這句只有當UIToolbar在螢幕的最頂端時才有效,而非它所在的view的最頂端。如果UIToolbar在一個view的頂端而這個view就像是twitterbot的timeline一樣上面有一定的空間,那麼此toolbar的位置仍然不是UIToolbarPositionTop。如果系統是iOS6的話,這點區別就會有很大的不同,因為預設的shadowImage只有在toolbar的位置為UIToolbarPositionTop的時候才會出現在下方。所以toolbar如果不在螢幕的頂端的話,你看到的陰影始終在它上面。
2;
程式碼: 在程式的任何一個 .m檔案 後面加上下面代碼即可 記住 要在 @end 的後面加上;
@implementation UINavigationBar (CustomImage2)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"bar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
@implementation UIToolbar (CustomImage2)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"bar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
@implementation UITabBar (CustomImage2)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"bar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
上面這三個的用法都是一樣的,關鍵是SearchBar
SearchBar的背景圖片控制不是由SearchBar 本身 而是由 UISearchBarBack 來控制的,因此無法直接用上面的代碼,需要手動把SearchBar上面的兩個View 刪除了才行。
且看刪除代碼:
在你的ViewDidLoad 或者任何一個程式可以執行到的地方 寫下如下代碼,不過首先你得nib 一個 UISearchbar 才行的
[[_searchBar.subviews objectAtIndex:0] setHidden:YES];
[[_searchBar.subviews objectAtIndex:0] removeFromSuperview];
for (UIView *subview in _searchBar.subviews) {
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
[subview removeFromSuperview];
break;
}
}
這個代碼 配合 上面的那個類別
@implementation UISearchBar (CustomImage2)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"bar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
OK了。
// ios5.0以後UINavigationBar,UIToolbar,UITabBar使用上述方法失效,需要使用下面方法:
- - (UIImage *)barBackground
- {
- return [UIImage imageNamed:@"top-navigation-bar.png"];
- }
-
- - (void)didMoveToSuperview
- {
- //iOS5 only
- if ([self respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
- {
- [self setBackgroundImage:[self barBackground] forBarMetrics:UIBarMetricsDefault];
- }
- }
-
- //this doesn't work on iOS5 but is needed for iOS4 and earlier
- - (void)drawRect:(CGRect)rect
- {
- //draw image
- [[self barBackground] drawInRect:rect];
- }
-
- @end
更詳細的解決方案請參考:http://stackoverflow.com/questions/7657465/uinavigationbars-drawrect-is-not-called-in-ios-5-0;ios5.0以後的解決方案轉載於:http://blog.csdn.net/wave_1102/article/details/4768212
=========================
下面說一下 給UIToolbar設定背景色,為什麼
[self.toolBar_video setBackgroundImage:[UIImage imageNamed:@"iphone_downbar_bg"] forToolbarPosition:UIToolbarPositionBottom barMetrics:UIBarMetricsDefault];或者
UIToolbarPositionTop 不好用呢。
官方文檔說了,Sets the image to use for the background in a given position and with given metrics.用在指定的position和指定的metrics設定i背景圖,
好糾結!幸好我們有類別!官方不好 搞定的,我們都可以自己實現一個或者重寫。