iOS 8 - 将模糊应用于导航栏和状态栏

Chr*_*way 6 cocoa-touch objective-c ios ios8

我正在尝试将模糊效果添加到导航栏和状态栏.我的问题是导航栏上的模糊很好,但状态栏不会模糊.

我的问题是:如何扩展边界以包含状态栏?

我正在使用以下方法来创建模糊效果:

- (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];
Run Code Online (Sandbox Code Playgroud)

}

在我的plist中,我有基于View控制器的状态栏外观 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];
Run Code Online (Sandbox Code Playgroud)

在viewDidLoad中完成其他任何重要操作.当我构建它时,这是视图的样子 - 它是一个嵌入在NavigationController中的tableViewController,我也使用了优秀的SWRevealViewController.

查看状态栏是如何模糊的:

模糊仅在导航栏部分 - 状态栏不模糊

任何帮助将非常感激!

更新:

见下面的答案.以下是已实施解决方案的屏幕截图:

应用解决方案的屏幕截

sau*_*man 6

我一直试图取得类似的效果,在使用UINavigationBar的API进行调整后无法达到预期的效果后,我找到了一个解决方法:

  1. 创建一个与NavigationBar + StatusBar大小相同的UIView.也就是说,它的帧数为(0,0,w,64),其中w是屏幕的宽度.(我是通过Storyboard完成的,并使用autolayout将宽度约束设置为等于其superview的宽度约束)

  2. 设置UIView的backgroundColor颜色.

  3. 使用以下代码使navigationBar完全透明: navBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) navBar.shadowImage = UIImage() navBar.translucent = true

  4. 现在将模糊效果应用于该视图,这会产生模糊效果来自导航栏和状态栏的错觉.

看到这张图片是为了达到效果(抱歉,由于声誉限制,我无法发布图片).

希望这可以帮助.

更新2015-05-28:

这就是我在StoryBoard中实现上述方法的方法:

  1. 在最顶层中创建导航栏背景视图作为主视图的直接子项.请注意,我将其他所有内容都包含在一个内容视图中.内容视图为红色,导航栏背景视图为半透明白色.

在此输入图像描述

  1. 在导航栏背景视图上添加以下4个约束:0表示左,右和上限制,64表示高度约束.