求助:状态栏网络活动指示器无法隐藏(已设View controller-based...为NO)
我之前也碰到过类似的棘手问题,结合你的场景(View controller-based status bar appearance设为NO),给你几个针对性的排查和解决方向:
检查第三方网络框架的自动管理
很多主流网络库(比如Alamofire、AFNetworking)默认会自动控制网络活动指示器的显示/隐藏,这可能会覆盖你手动设置的值:- 如果用Alamofire,需要关闭它的全局指示器管理:
NetworkActivityIndicatorManager.shared.isEnabled = false - 如果用AFNetworking,要检查是否开启了
networkActivityIndicatorManager相关的自动控制,找到对应的配置项禁用它。
- 如果用Alamofire,需要关闭它的全局指示器管理:
全局搜索所有修改指示器状态的代码
打开Xcode按Cmd+Shift+F,搜索关键词isNetworkActivityIndicatorVisible(Swift)或networkActivityIndicatorVisible(OC),看看项目里有没有其他地方在设置这个属性为true,尤其是在你设置false之后执行的代码——比如某些网络请求工具类、页面初始化逻辑里,可能在你不知情的情况下重复修改了状态。调整设置时机,避免被后续代码覆盖
你之前在didFinishLaunchingWithOptions和viewDidLoad里设置的时机可能太早,后续的系统初始化或业务代码可能会重置这个状态:- 尝试在AppDelegate的
applicationDidBecomeActive方法里再设置一次:func applicationDidBecomeActive(_ application: UIApplication) { application.isNetworkActivityIndicatorVisible = false } - 或者在主视图控制器的
viewDidAppear方法中设置,确保视图显示后强制隐藏指示器。
- 尝试在AppDelegate的
确认Info.plist配置的正确性
再去Info.plist里核对View controller-based status bar appearance的值确实是NO,有时候可能因为多人协作、配置文件冲突等原因,这个值被意外修改了——只有这个值为NO时,全局的UIApplication设置才会生效。极端情况:重置应用环境
如果以上方法都没用,可以试试删除模拟器/真机上的应用,清空Xcode缓存(Cmd+Shift+K),重新编译安装,排除因为缓存导致的状态异常。
内容的提问来源于stack exchange,提问作者mcgtrt

