UIToolbarPosition UIToolbar背景

來源:互聯網
上載者:User

先來點從別人那裡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背景圖,

好糾結!幸好我們有類別!官方不好 搞定的,我們都可以自己實現一個或者重寫。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.