2012-01-13 120 views
5

我的應用程序在主頁的導航欄上使用了一個導航控制器,其中包含一個圖像。背景圖片通過在應用委託中放置刪除UINavigationBar上的背景圖像

[navigationController.navigationBar setBackgroundImage:navImage forBarMetrics:UIBarMetricsDefault]; 
[_window addSubview:navigationController.view]; 

完成。導航欄很好地顯示此圖像。

其他視圖將不是在導航欄中有一個圖像。因此,我需要在推送任何其他視圖控制器時刪除此背景圖像。有誰知道這可以做到嗎?

在網上有很多關於添加或更改導航欄圖像的答案,但這個問題有點不同。先謝謝你。

回答

3

我相信這是第一個實際的答案,這對於iOS5的,主要的問題是在背景圖像的「清除」一旦你完成。那麼,只需保留現有的圖像,並在完成後放回原處。

@implementation MyViewController { 
    UIImage *_defaultImage; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    _defaultImage = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault]; 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar.png"] forBarMetrics:UIBarMetricsDefault]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [self.navigationController.navigationBar setBackgroundImage:_defaultImage forBarMetrics:UIBarMetricsDefault]; 
} 
+0

有趣的方法! – alexshafran 2013-10-01 20:28:50

0

它看起來像要做到這一點最簡單的方法是:

1)設置主頁上的導航欄的阿爾法0.000001

2)把背景圖像中一個UIImageView「的背後「導航欄(現在已清除)

3)使用viewWillAppear/viewWillDisappear將視圖按下/彈出時,導航欄的不透明度設置爲1或0.00001。

5

要刪除UINavigationBar的背景的iOS 5或更高版本,你應該這樣做:

[navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; 

希望它可以幫助

+1

這看起來應該可以工作,但是如果我傳遞真實圖像,該功能只會改變任何東西。 – rgbrgb 2013-04-22 23:59:22

+0

這裏一樣的東西。 – 2013-05-07 10:06:31

+2

不起作用。正如rgbrgb所說。它只對某個有效圖像做某些事情。 – 2013-08-14 00:16:54

3

您可以設置背景圖片,在運行時創建的空白圖像。

UIGraphicsBeginImageContextWithOptions(CGSizeMake(36, 36), NO, 0.0); 
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
[[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault]; 

在運行時創建空白圖像: How to create a blank transparent png in Objective-C?

+0

這很好。雖然我用'CGSizeZero' – 2013-10-24 16:39:03

0

這裏沒有什麼能爲我工作。搜索了幾個小時後,唯一有效的工作是遵循Apple提供的source code example

我放置了下面的代碼,它工作並最終從其他視圖控制器中刪除了導航欄圖像!

// Reset everything about navigation bar. (Other flows' background image used to show up on another view controller) 
    self.navigationController!.navigationBar.setBackgroundImage(nil, for: .default) 
    self.navigationController!.navigationBar.setBackgroundImage(nil, for: .compact) 
    self.navigationController!.navigationBar.barTintColor = nil 
    self.navigationController!.toolbar.barTintColor = nil 
    self.navigationController!.toolbar.isTranslucent = true 

希望這可以幫助別人。

乾杯