如何在我的 UINavigationBar 后面获得模糊效果

Posted

技术标签:

【中文标题】如何在我的 UINavigationBar 后面获得模糊效果【英文标题】:how to get a blurred effect behind my UINavigationBar 【发布时间】:2016-06-22 01:22:47 【问题描述】:

我一直在尝试让我的 scrollView 出现在导航栏下的效果略微模糊,就像苹果消息应用程序中的情况一样。我尝试了以下方法,但都没有奏效:

1:

self.navigationController?.navigationBar.isTranslucent = true

2:

self.navigationController?.navigationBar.barStyle = UIBarStyle.blackTranslucent

3:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)

4:

self.navigationController?.navigationBar.backgroundColor = UIColor.clear()

我已经阅读了许多有关上述方法的变体的帖子,并且尝试了其中的大部分但无济于事。我认为设置 isTranslucent = true 的目的是为了获得这种效果。还有什么我应该尝试的吗?基本上我只是希望我的导航栏稍微透明。

【问题讨论】:

【参考方案1】:

UIVisualEffectView 是您正在寻找的,并且很好地证明了here:

let bounds = self.navigationController?.navigationBar.bounds as CGRect!
let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
visualEffectView.frame = bounds
self.navigationController?.navigationBar.addSubview(visualEffectView)

也就是说,同时使用方法 1 和 2 也应该可以:

self.navigationController.navigationBar.translucent = YES;
self.navigationController.navigationBar.topItem.title = @"Contacts";
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

【讨论】:

【参考方案2】:

在这里你可以为你的导航栏模糊效果添加这个代码这个功能非常适合你

func navigationBlurEffect() 
    // Add blur view
    let bounds = self.navigationController?.navigationBar.bounds as CGRect!
    let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
    visualEffectView.frame = bounds
    visualEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]

    //here you can choose one 
    self.navigationController?.navigationBar.addSubview(visualEffectView)
    // Or
    /*
 If you find that after adding blur effect on navigationBar, navigation buttons are not visible then add below line after adding blurView code.
    */ 
    self.navigationController?.navigationBar.sendSubviewToBack(visualEffectView)

    // Here you can add visual effects to any UIView control.
    // Replace custom view with navigation bar in above code to add effects to custom view.

//**这仅适用于图像模糊代码 这段代码可用于图像模糊效果

  func getImageBlur(image:UIImageView)
        let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = (image.bounds)
        blurEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        image.addSubview(blurEffectView)
    

【讨论】:

【参考方案3】:
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = (self.navigationController?.navigationBar.bounds)!
    self.navigationController?.navigationBar.addSubview(blurEffectView)

【讨论】:

以上是关于如何在我的 UINavigationBar 后面获得模糊效果的主要内容,如果未能解决你的问题,请参考以下文章

如何防止黑色背景出现在我的UINavigationBar中?

如何将子视图添加到 UIViewController 将 UINavigationBar 推到后面

在我的 UINavigationBar 中为我的标题添加图像而不是标题

UIBarButton 未在 UINavigationBar 中显示

UINavigationBar 后退按钮图标

UINavigationBar 大标题重影