我正在尝试将模糊效果添加到导航栏和状态栏。 我的问题是导航栏上的模糊很好,但状态栏不会模糊。
我的问题是:如何扩展边界以包含状态栏?
我正在使用以下方法来创建模糊效果:
- (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。
查看状态栏是如何模糊的:
任何帮助都会非常感激!
更新:
见下面的答案。以下是已实施解决方案的屏幕截图:
答案 0 :(得分:6)
我一直试图取得类似的效果,在使用UINavigationBar的API进行调整后无法达到预期效果后,我找到了解决方法:
创建与NavigationBar + StatusBar大小相同的UIView。也就是说,它的帧数为(0,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:
这就是我在StoryBoard中实现上述方法的方法: