弹出ViewController后状态栏出现阴影的Navigation Controller问题求助
问题:弹出ViewController时状态栏出现阴影,需去除
我在弹出ViewController时,弹出过程正常,但状态栏出现阴影(当前效果截图),想要实现无阴影的状态栏效果(目标效果截图)。已经尝试修改状态栏样式,以及将view controller-based status bar appearance设为true或false,均无效果,请求分析阴影成因并解决。
使用的导航代码如下:
func navigationMethod() { let pharmacyStoryboard = UIStoryboard(name: "Main", bundle: nil) let copayCalculationVCidentifier = String(describing: ChangeViewCotnroller.self) if let copayCalculationViewController = pharmacyStoryboard.instantiateViewController(identifier: copayCalculationVCidentifier, creator: { coder in let copayCalculationVC = ChangeViewCotnroller(coder: coder) return copayCalculationVC }) as? ChangeViewCotnroller { present(copayCalculationViewController, withModelStyle: .automatic, animated: true, completion: nil) } }
成因分析
这个阴影并非状态栏本身的样式问题,而是模态视图控制器的默认背景模糊/阴影效果导致的。当使用.automatic模态样式时,系统会为模态容器添加背景模糊和边缘阴影,状态栏区域会继承这个容器的视觉效果。你之前调整的状态栏样式仅影响文字颜色或显示状态,无法解决容器阴影带来的问题。
解决方案
方案1:移除模态容器的阴影
在弹出的ChangeViewCotnroller的viewDidLoad方法中,直接修改模态容器的阴影属性:
override func viewDidLoad() { super.viewDidLoad() // 移除模态容器的阴影 presentationController?.containerView?.layer.shadowOpacity = 0 }
方案2:更换模态展示样式
如果不需要系统默认的sheet样式,可以改用fullScreen或overFullScreen样式,这类样式不会添加状态栏阴影:
// 修改弹出代码中的模态样式(注意修复原代码的拼写错误:withModelStyle → modalPresentationStyle) copayCalculationViewController.modalPresentationStyle = .fullScreen present(copayCalculationViewController, animated: true, completion: nil)
方案3:适配状态栏背景色
如果阴影是因为状态栏背景与VC顶部背景过渡导致的视觉差,可以给状态栏设置和VC一致的背景色:
override func viewDidLoad() { super.viewDidLoad() // iOS 13+ 适配状态栏背景 if #available(iOS 13.0, *) { let statusBarManager = UIApplication.shared.keyWindow?.windowScene?.statusBarManager let statusBarFrame = statusBarManager?.statusBarFrame ?? .zero let statusBarView = UIView(frame: statusBarFrame) statusBarView.backgroundColor = view.backgroundColor // 和VC背景保持一致 view.addSubview(statusBarView) } else { // iOS 13以下版本 let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame) statusBarView.backgroundColor = view.backgroundColor view.addSubview(statusBarView) } }
内容的提问来源于stack exchange,提问作者Ganesh
相关产品推荐
相关产品推荐

