在寻求了很多,尝试了很多解决方案后,没有解决我的问题。在我的应用程序中,我自定义了UINavigationController以获得模糊效果:
类CustomNavigationController:UINavigationController{
override func viewDidLoad() {
super.viewDidLoad()
let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .regular))
visualEffectView.frame = (self.navigationBar.bounds.insetBy(dx: 0, dy: -40).offsetBy(dx: 0, dy: -40))
self.navigationBar.isTranslucent = true
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.addSubview(visualEffectView)
self.navigationBar.sendSubviewToBack(visualEffectView)
}
}
然后,在Main.Storyboard中,我为导航控制器项选择了自定义类。
模糊效果工作正常,状态图标正确可见,但不是标准的导航栏项:左按钮,标题和右按钮。
它们会出现片刻,但在自定义导航栏覆盖它们之后不久。
我正在使用Xcode12.4并在iPhone XR上运行该应用程序。
如何再次显示导航栏元素?
提前多谢了。
iOS中的半透明导航栏已经模糊了栏后的内容,因此您不需要添加UIVisualEffectView
,也不需要设置BackgroundImage
。
如果将代码修改为:
override func viewDidLoad()
{
super.viewDidLoad()
self.navigationBar.isTranslucent = true
}
这没有达到你所要的视觉效果吗?
如果没有,请尝试对您的方法进行以下调整:
override func viewDidLoad()
{
super.viewDidLoad()
self.navigationBar.isTranslucent = true
// create a UIImageView
let backgroundImage: UIImageView = UIImageView()
backgroundImage.autoresizingMask = [.flexibleWidth, .flexibleHeight]
// add a blur effect to the ImageView
let visualEffectView: UIVisualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .regular))
visualEffectView.frame = (self.navigationBar.bounds.insetBy(dx: 0, dy: -40).offsetBy(dx: 0, dy: -40))
backgroundImage.addSubview (visualEffectView)
// and set that as your backgroundImage on the navigationBar
self.navigationBar.setBackgroundImage(backgroundImage.image, for: .default)
}
这增加了背景图像的模糊效果。这似乎对我有用,但视觉效果与仅仅使用我的第一个建议没有什么不同,可能是因为backgroundimage.image==nil
。
这当然是一种改进的方法,因为它不会向UINavigationBar
视图层次结构中添加意外的子视图,而且我注意到这两种方法都不会影响条控件的可见性。