先来点从别人那里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;
@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
=========================
[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背景图,