如何消除推送视图时导航栏上方的透明区域?
导航栏背景色设置无效的解决方案
1. 关闭导航栏半透明属性
iOS默认导航栏为半透明状态,会导致背景色显示异常,先关闭该属性:
// Swift navigationController?.navigationBar.isTranslucent = false
// Objective-C self.navigationController.navigationBar.translucent = NO;
2. 适配iOS版本设置导航栏背景
iOS 13及以上(推荐使用UINavigationBarAppearance)
// Swift let navAppearance = UINavigationBarAppearance() navAppearance.backgroundColor = .systemBlue // 替换为你需要的颜色 navigationController?.navigationBar.standardAppearance = navAppearance navigationController?.navigationBar.scrollEdgeAppearance = navAppearance // 适配滚动到顶部的样式
// Objective-C UINavigationBarAppearance *navAppearance = [[UINavigationBarAppearance alloc] init]; navAppearance.backgroundColor = [UIColor systemBlueColor]; self.navigationController.navigationBar.standardAppearance = navAppearance; self.navigationController.navigationBar.scrollEdgeAppearance = navAppearance;
iOS 13以下版本
// Swift navigationController?.navigationBar.barTintColor = .systemBlue
// Objective-C self.navigationController.navigationBar.barTintColor = [UIColor systemBlueColor];
3. 排查全局或自定义导航栏配置
检查项目中是否存在AppDelegate/SceneDelegate里的全局导航栏样式设置,或者自定义的UINavigationBar子类,这些配置会覆盖当前页面的设置,需要调整冲突的代码。
4. 同步导航控制器视图背景色
避免滚动页面时露出不协调的背景色,同步设置导航控制器的视图背景:
// Swift navigationController?.view.backgroundColor = .systemBlue
// Objective-C self.navigationController.view.backgroundColor = [UIColor systemBlueColor];
内容的提问来源于stack exchange,提问作者Halpo
相关产品推荐
相关产品推荐

