技术求助:如何移除导航栏上方信号图标左侧的4个点?仅iPhone X存在该问题
嘿,我刚好碰到过类似的情况,你看到的那4个点其实是iPhone X及之后全面屏设备特有的系统额外状态图标占位区,专门用来承载漫游、VoLTE这类附加状态图标,但你的场景里系统没正确隐藏空占位,所以就显示出来了。
结合你说的“只修改了状态栏图标颜色”这个操作,大概率是设置状态栏样式的方式触发了系统布局异常,给你几个具体的排查方向:
先检查状态栏样式的设置方式:
如果你只是直接用UIApplication.shared.statusBarStyle = .lightContent来改颜色,在iOS 13+的全面屏设备上很容易出兼容性问题。iOS 13之后苹果推荐用UIViewController的preferredStatusBarStyle来控制,或者先在Info.plist里把View controller-based status bar appearance设为YES,再统一管理样式,这样能避免系统布局混乱。临时移除改颜色的代码验证:
你可以先把AppDelegate里修改状态栏颜色的代码注释掉,看看这4个点会不会消失。如果消失了,那肯定就是样式设置导致的系统误渲染了。适配全面屏的状态栏设置时机:
iPhone X的状态栏布局和老设备不一样,系统会动态调整图标区域。你可以试试把状态栏样式的设置放在窗口初始化完成之后,比如:func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // 先初始化窗口和根控制器 window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = YourRootViewController() window?.makeKeyAndVisible() // 再设置状态栏样式 if #available(iOS 13.0, *) { guard let statusBarFrame = window?.windowScene?.statusBarManager?.statusBarFrame else { return true } let statusBarView = UIView(frame: statusBarFrame) statusBarView.backgroundColor = .clear // 这里可以根据你的需求调整背景 window?.addSubview(statusBarView) } else { UIApplication.shared.statusBarStyle = .lightContent } return true }
另外,也有可能是项目里的第三方库或者其他隐式修改状态栏的代码搞的鬼。你可以建个空白Demo,只加改状态栏颜色的代码,看看会不会复现——如果Demo没问题,那就是现有项目里有代码冲突了。
内容的提问来源于stack exchange,提问作者Agung

