2015-02-04 101 views
6

我正在嘗試嚮導航欄和狀態欄添加模糊效果。 我的問題是,模糊在導航欄上變得很好,但狀態欄不會模糊。iOS 8 - 將模糊應用於導航欄和狀態欄

我的問題是:如何擴展邊界以包含狀態欄?

我用下面的方法來創建模糊效果:

- (void) addBlurEffect { 

CGRect bounds = self.navigationController.navigationBar.bounds; 
UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]]; 
visualEffectView.frame = bounds; 
visualEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
[self.navigationController.navigationBar addSubview:visualEffectView]; 
self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; 
[self.navigationController.navigationBar sendSubviewToBack:visualEffectView]; 

}

在我的plist,我查看了基於控制器的狀態欄外觀YES

在viewDidLoad中我打電話給方法:

- (void)configureView { 

    // style controls 

    self.addAirportButton.tintColor = [UIColor whiteColor]; 

    // style background image 

    UIImageView *sidebarBackground = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sidebarBackground"]]; 
    self.tableView.backgroundView = sidebarBackground; 

    // style navigation bar 

    self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent; 

    // this makes navigation bar transparent 

    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] 
                forBarMetrics:UIBarMetricsDefault]; 
    self.navigationController.navigationBar.shadowImage = [UIImage new]; 
    self.navigationController.navigationBar.translucent = YES; 

    // style toolbar 

    self.navigationController.toolbar.translucent = YES; 
    self.dismissAdsButton.tintColor = [UIColor whiteColor]; 

沒有其他重要的事情在viewDidLoad中完成。 當我建立這個,這裏是視圖的樣子 - 它是一個嵌入在NavigationController中的tableViewController,並且我也使用了優秀的SWRevealViewController。

查看如何在狀態欄沒有模糊:

The blur is only in the navigation bar part - the status bar is not blurred

任何幫助將非常感激!

更新:

查看下面的答案。下面是實施的解決方案的截圖:

screenshot with solution applied

+0

你有沒有打過電話這一切都源自viewWillAppear中,而不是viewDidLoad中當視圖即將出現的第一次? –

+0

我試過了,沒有變化,不幸。 –

回答

5

我一直在努力實現類似的效果,與UINavigationBar的的API調整之後,也可能無法達到預期的結果,我發現了一個解決辦法:

  1. 創建一個與您的NavigationBar + StatusBar大小相同的UIView。也就是說,它會有一個(0,0,w,64)的框架,其中w是屏幕的寬度。 (我通過Storyboard進行了此操作,並使用自動佈局將寬度約束設置爲等於其超級視圖的寬度約束)

  2. 設置UIView的backgroundColor以清除顏色。

  3. 做出的導航欄下面的代碼完全透明: navBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) navBar.shadowImage = UIImage() navBar.translucent = true

  4. 現在應用模糊效果是查看,這是創造幻想的模糊效果是無論從導航欄和狀態欄。

查看this picture達到了效果(抱歉,由於名譽限制,我無法發佈圖片)。

希望這會有所幫助。

更新2015-05-28:

我這是怎麼實現的故事板前述方法:

  1. 創建最上面的層級中的導航欄背景視圖作爲主視圖的直接子。請注意,我已將其包裝到單個內容視圖中。內容視圖顯示爲紅色,導航欄背景視圖顯示爲半透明白色。

enter image description here

  • 附加以下導航欄背景視圖像這樣4個約束:0爲左,右,和頂部約束,和64爲高度限制。
  • +0

    非常好。我會試試這個。 –

    +0

    你是如何在故事板結構中添加UIView的?你能發佈故事板和結構視圖的截圖嗎? –

    +0

    嗨@ChrisHolloway,我用屏幕截圖更新了我的答案。如果您需要進一步澄清,請不要猶豫,讓我知道。 – saulgoodman