现在的位置: 首页 > 综合 > 正文

UIToolbarPosition UIToolbar背景

2013年09月20日 ⁄ 综合 ⁄ 共 3075字 ⁄ 字号 评论关闭

先来点从别人那里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使用上述方法失效,需要使用下面方法:

  1. - (UIImage *)barBackground  
  2. {  
  3.     return [UIImage imageNamed:@"top-navigation-bar.png"];  
  4. }  
  5.   
  6. - (void)didMoveToSuperview  
  7. {  
  8.     //iOS5 only  
  9.     if ([self respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])  
  10.     {  
  11.         [self setBackgroundImage:[self barBackground] forBarMetrics:UIBarMetricsDefault];  
  12.     }  
  13. }  
  14.   
  15. //this doesn't work on iOS5 but is needed for iOS4 and earlier  
  16. - (void)drawRect:(CGRect)rect  
  17. {  
  18.     //draw image  
  19.     [[self barBackground] drawInRect:rect];  
  20. }  
  21.   
  22. @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背景图,

好纠结!幸好我们有类别!官方不好 搞定的,我们都可以自己实现一个或者重写。

抱歉!评论已关闭.