我正在尝试将模糊效果添加到导航栏和状态栏.
我的问题是导航栏上的模糊很好,但状态栏不会模糊.
我的问题是导航栏上的模糊很好,但状态栏不会模糊.
我的问题是:如何扩展边界以包含状态栏?
- (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中,我有基于View控制器的状态栏外观YES
- (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.
查看状态栏是如何模糊的:
任何帮助将非常感激!
更新:
见下面的答案.以下是已实施解决方案的屏幕截图:
解决方法
我一直试图取得类似的效果,在使用UINavigationBar的API进行调整后无法达到预期的效果后,我找到了一个解决方法:
>创建与NavigationBar StatusBar大小相同的UIView.也就是说,它的帧数为(0,w,64),其中w是屏幕的宽度. (我是通过Storyboard完成的,并使用autolayout将宽度约束设置为等于其superview的宽度约束)
>设置UIView的backgroundColor以清除颜色.
>使用以下代码使navigationBar完全透明:
navBar.setBackgroundImage(UIImage(),forBarMetrics:UIBarMetrics.Default)
navBar.shadowImage = UIImage()
navBar.translucent = true
>现在将模糊效果应用于该视图,这会产生模糊效果来自导航栏和状态栏的错觉.
请参阅this picture以获得实现效果(抱歉,由于声誉限制,我无法发布图像).
希望这可以帮助.
更新2015-05-28:
>在最顶层中创建导航栏背景视图作为主视图的直接子项.请注意,我将其他所有内容都包含在一个内容视图中.内容视图为红色,导航栏背景视图为半透明白色.
>在导航栏背景视图上添加以下4个约束:0表示左,右和上限制,64表示高度约束.