【问题标题】:Real time blur effect for Navigation Bar - Status bar not getting in导航栏的实时模糊效果 - 状态栏未进入
【发布时间】:2015-10-11 16:23:57
【问题描述】:

关注this question在导航栏中获得实时模糊效果:

func addBlurEffect() {
var bounds = self.navigationController?.navigationBar.bounds as CGRect!
var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) as UIVisualEffectView
visualEffectView.frame = bounds
visualEffectView.autoresizingMask = .FlexibleHeight | .FlexibleWidth
self.navigationController?.navigationBar.addSubview(visualEffectView)
}

但状态栏保持半透明:

如何解决?


调试:

    print(self.navigationController?.navigationBar.bounds)
    // Returns (0.0, 0.0, 320.0, 44.0)

    print(UIApplication.sharedApplication().statusBarFrame)
    // Returns (0.0, 0.0, 320.0, 20.0)

【问题讨论】:

标签: ios swift uinavigationcontroller uinavigationbar


【解决方案1】:

部分原因是您将视觉效果视图的框架设置为导航栏的边界。您在屏幕截图中看到的是导航栏的边界。因此,您可以通过为您的视觉效果视图提供不同的框架来进行补偿,即将其原点向上移动 20 点并增加其高度。

不过,我有点不清楚,为什么不让导航栏变成半透明。导航栏半透明是模糊效果,支持。你正在做的——向导航栏添加一个子视图——不是。

【讨论】:

  • 嘿@matt,我正在使用LTNavigationBar 库。我无法使用简单的“.translucent”方式使其工作。我设法根据您的回答调整了界限,谢谢。如果其他人需要,我会添加它。
  • 如果我的回答对你有帮助,请采纳。下次,当您提出问题时请提供相关信息(例如,您正在使用某些第三方库)。谢谢。
【解决方案2】:

设法让它工作添加这个:

bounds.offsetInPlace(dx: 0.0, dy: -20.0)
bounds.size.height = bounds.height + 20.0

【讨论】:

  • 这只是按照我说的去做;它什么也没增加。
【解决方案3】:

至于这个问题,我修改了Kampai之前的回答,原贴here。

下面的代码会模糊状态栏和导航栏。

斯威夫特 4:

func navigationBarBlur() {
    let bounds = CGRect(x: 0.0, y: -20.0, width: UserDefaults.screenWidth, height: (self.navigationController?.navigationBar.bounds.size.height)! + 20.0)
    let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))
    self.visualEffectView = visualEffectView
    visualEffectView.frame = bounds
    visualEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.navigationController?.navigationBar.addSubview(visualEffectView)
}

【讨论】:

    猜你喜欢
    • 2015-02-03
    • 2015-09-09
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2020-03-06
    相关资源
    最近更新 更多