iOS RCTStatusBarManager红屏警告 处理报告

项目在开发阶段一路东风,集成后出了问题,iOS红屏警告,如下图

RCTStatusBarManager 红屏报错

网络给出的结论是:
引用(dangxy丶)界面,侵删给出的解决方法是修改info.plist文件
在info.plist中,add row添加View controller-based status bar appearance并设置为NO即可。改个配置而已,分分钟的事

iOS RCTStatusBarManager红屏警告 处理报告_第1张图片
放心,不可能放心的,这辈子都不可能放心的,程序员就是要做修修改改的事

重点来了,由于要修改原生配置,我们经理不允许

无奈我们只能找出 引用RCTStatusBarManager的地方,屏蔽删除
看iOS源码 我们找到支撑RN的原生类RCTStatusBarManager

文件地址

为什么会红屏?

iOS RCTStatusBarManager红屏警告 处理报告_第2张图片
获取iOS原生配置
iOS RCTStatusBarManager红屏警告 处理报告_第3张图片
判断方法是否可用
现在我们有两种改法,

原生改法

修改 RCTViewControllerBasedStatusBarAppearance方法,改动如下

static BOOL RCTViewControllerBasedStatusBarAppearance()
{
  static BOOL value;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    value = [[[NSBundle mainBundle] objectForInfoDictionaryKey:
              @"UIViewControllerBasedStatusBarAppearance"] ?: @YES boolValue];
  });

  return false;
}

或,屏蔽RCTLogError 眼不见心不烦

RCT_EXPORT_METHOD(setStyle:(UIStatusBarStyle)statusBarStyle
                  animated:(BOOL)animated)
{
  if (RCTViewControllerBasedStatusBarAppearance()) {
    //RCTLogError(@"RCTStatusBarManager module requires that the \
                UIViewControllerBasedStatusBarAppearance key in the Info.plist is set to NO");
  } else {
    [RCTSharedApplication() setStatusBarStyle:statusBarStyle
                                     animated:animated];
  }
}

RCT_EXPORT_METHOD(setHidden:(BOOL)hidden
                  withAnimation:(UIStatusBarAnimation)animation)
{
  if (RCTViewControllerBasedStatusBarAppearance()) {
    //RCTLogError(@"RCTStatusBarManager module requires that the \
                UIViewControllerBasedStatusBarAppearance key in the Info.plist is set to NO");
  } else {
    [RCTSharedApplication() setStatusBarHidden:hidden
                                 withAnimation:animation];
  }
}

简单粗暴从此告别statusbar引起的红屏


iOS RCTStatusBarManager红屏警告 处理报告_第4张图片
info.plist配置都不让修改,修改RN原生源码,别闹了凶DEI

找到RN的包

从源码上看,当StatusBar调用隐藏或者style时会红屏,所以请区分对待

getStatusBarFromPlatform = () => {
    switch (Platform.OS) {
      case 'ios':
        return 
      case 'android':
        return 

你可能感兴趣的:(iOS RCTStatusBarManager红屏警告 处理报告)