如何解决iOS 15 Navigation Bar透明设置失效问题
你现有代码中iOS 15适配部分调用了configureWithOpaqueBackground(),该方法会将导航栏默认配置为不透明样式,是导致透明效果失效的核心原因。
修正后可生效的完整代码
override func viewDidLoad() { super.viewDidLoad() // iOS 15以下版本适配逻辑保持不变 self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.isTranslucent = true if #available(iOS 15, *) { let appearance = UINavigationBarAppearance() // 替换为透明背景专属配置方法 appearance.configureWithTransparentBackground() // 清除阴影分割线 appearance.shadowImage = UIImage() appearance.backgroundImage = UIImage() // 仅当前页面生效的写法,不需要全局生效就不要调用UINavigationBar.appearance() self.navigationController?.navigationBar.standardAppearance = appearance self.navigationController?.navigationBar.scrollEdgeAppearance = appearance } }
注意事项
- 如果仅需要当前页面导航栏透明,不要使用
UINavigationBar.appearance()做全局设置,直接赋值给当前导航控制器的导航栏属性即可,避免影响其他页面的导航栏样式 - 必须保证
isTranslucent属性为true,否则透明效果无法生效 - 如果需要适配滚动时的导航栏样式,可根据业务需求单独调整
scrollEdgeAppearance配置,不需要和standardAppearance保持一致

内容的提问来源于stack exchange,提问作者kiran
相关产品推荐
相关产品推荐

