iOS Pro Max机型添加模糊视图无法覆盖全屏问题求助
问题描述
我用以下代码给背景视图添加模糊效果:
let blurEffect = UIBlurEffect(style: .dark) let blurredView = UIVisualEffectView(effect: blurEffect) blurredView.frame = self.bounds self.backgroundView?.addSubview(blurredView)
但在iPhone Pro Max机型上,模糊视图无法覆盖整个屏幕,效果如图:
解决方案
核心问题是直接设置frame = self.bounds没适配屏幕尺寸变化与安全区,Pro Max这类带灵动岛/刘海的机型中,bounds可能未包含安全区外区域。以下两种方案可解决:
AutoLayout约束(推荐)
放弃固定frame,给模糊视图添加全屏约束,确保完全覆盖父视图:let blurEffect = UIBlurEffect(style: .dark) let blurredView = UIVisualEffectView(effect: blurEffect) blurredView.translatesAutoresizingMaskIntoConstraints = false guard let backgroundView = self.backgroundView else { return } backgroundView.addSubview(blurredView) NSLayoutConstraint.activate([ blurredView.topAnchor.constraint(equalTo: backgroundView.topAnchor), blurredView.leadingAnchor.constraint(equalTo: backgroundView.leadingAnchor), blurredView.trailingAnchor.constraint(equalTo: backgroundView.trailingAnchor), blurredView.bottomAnchor.constraint(equalTo: backgroundView.bottomAnchor) ])自动调整大小适配
若不想用AutoLayout,可设置autoresizingMask让视图跟随父视图尺寸变化:let blurEffect = UIBlurEffect(style: .dark) let blurredView = UIVisualEffectView(effect: blurEffect) guard let backgroundView = self.backgroundView else { return } blurredView.frame = backgroundView.bounds blurredView.autoresizingMask = [.flexibleWidth, .flexibleHeight] backgroundView.addSubview(blurredView)
额外注意:要确保backgroundView本身已适配全屏,否则子视图也无法覆盖整个屏幕。
内容的提问来源于stack exchange,提问作者Pedro Gonzalez
相关产品推荐
相关产品推荐

