iOS13关于状态栏在横屏模式下隐藏的解决办法 您所在的位置:网站首页 iphone显示状态栏 iOS13关于状态栏在横屏模式下隐藏的解决办法

iOS13关于状态栏在横屏模式下隐藏的解决办法

2023-09-05 05:37| 来源: 网络整理| 查看: 265

在iOS13更新后,测试小伙伴反馈视频播放时,在横屏模式下看不到状态栏的信息了!!!直到前段时间看一个直播的App,居然发现在横屏下状态栏显示了时间和电池电量,以为恢复了。然而并没有,了解了当下一些主流的有视频播放的App,状态栏都是自家添加的,你会发现各家基本上都不太一样。但都有共同点:时间+电池。

笔者也简单弄了下:

statusBar.png

时间

首先是时间,一般手机有两个时制:12H制和24H制。两者在显示下有些许差异,比如下午3点,12H下显示:下午 3:00,而在24H下就显示:15:00,就需要判断当前的时间是12H还是24H的。这也简单就是输出当前时间,判断是否包含AM或PM,12H制下会输出:3:00 PM,24H制下会输出:15:00。 判断时制:

- (BOOL)is24H{ if(!_is24H){ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setLocale:[NSLocale currentLocale]]; [formatter setDateStyle:NSDateFormatterNoStyle]; [formatter setTimeStyle:NSDateFormatterShortStyle]; NSString *dateString = [formatter stringFromDate:[NSDate date]]; NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; _is24H = (amRange.location == NSNotFound && pmRange.location == NSNotFound); } return _is24H; }

如果你还想监听用户在手机系统设置中切换时制,可以加入这个通知

UIKIT_EXTERN NSString *const UIApplicationSignificantTimeChangeNotification;

后面可以写一个定时器来是定时更新当前显示的时间信息,但其实有个取巧的办法:因为一般横屏情况下,这个顶部工具条在显示一段时间(这个时间可能只有几秒)后自动动画隐藏,用户手动触发才会再次显示,所以只需要在这个顶部工具条需要显示的时候再去更新时间信息,就避免了定时器占内存了。某上市直播App就是这么干的。

电池

电池有两个信息,一个是电量,还有一个就是电池状态:是否处于低电量状态(小于或等于20%);是否开启了低电量模式(前者电池是红色,后者是黄色);是否正在充电(电池是绿色,且显示小闪电的正常充电图标)。

我们可以通过 batteryState 来获取电池状态,通过 batteryLevel来获取电池电量信息。值得一提的是,在获取电池信息之前,需要手动设置 batteryMonitoringEnabled 为 YES,不然batterystate 会返回 Unkonw。

[UIDevice currentDevice].batteryMonitoringEnabled = YES; ///获取电池电量 NSLog(@"电池电量:%.2f", [UIDevice currentDevice].batteryLevel); ///获取电池状态 NSLog(@"电池状态 = %ld",[UIDevice currentDevice].batteryState);

电池的状态有以下几种:

UIDeviceBatteryStateUnknown /// 未知状态 UIDeviceBatteryStateUnplugged /// 未充电 UIDeviceBatteryStateCharging /// 正在充电(少于100%电量) UIDeviceBatteryStateFull /// 电池已充满(未拔出) 注意:获取的电池电量可能与系统显示电量的存在1%的差异,实际上我们很难获取准确的数据,至少笔者暂时还没找到,包括笔者也用了runtime来读取状态栏的私有变量。某上市直播App就经常存在这种差异,而B站和一些大厂为了避免这个问题,干脆不显示电池具体的百分数值,只显示对应比例的电量图。

此外我们还需判断用户是否开启低电量模式:

// 是否开启低电量模式 NSLog(@"是否开启低电量模式 = %d",[NSProcessInfo processInfo].lowPowerModeEnabled);

我们还可以用一下通知来监听电池电量的和电池状态的变化

UIKIT_EXTERN NSString *const UIDeviceBatteryLevelDidChangeNotification; ///电池电量变化 UIKIT_EXTERN NSString *const UIDeviceBatteryStateDidChangeNotification;  ///电池状态变化

其中,要发送此通知,必须将isBatteryMonitoringEnabled属性设置为true。 电池电量变化的通知发送频率不超过每分钟一次。不要试图计算电池放电率或电池剩余时间;放电率可能会根据内置应用程序和您的应用程序而频繁更改。

当我们检测低电量模式的时候,需要注意以下两点: 低电量模式仅支持 iOS 9 。当 App 需要兼容更早的版本时,先检查api的可用性。 低电量模式仅适用于 iPhone ,在 iPad 中,isLowPowerModeEnabled 的返回值始终为 NO 当我们检测到用户开启了低电量模式,可以为用户做一些小改变,来帮助用户延长电池续航。以下是 Apple 给出一些建议:

停止使用定位服务 减弱动画效果 停止后台任务(比如网络请求) 禁用运动追踪

最后是自己写的简单的demo : RCStatusBar



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有