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

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

重点来了,由于要修改原生配置,我们经理不允许
无奈我们只能找出 引用RCTStatusBarManager的地方,屏蔽删除
看iOS源码 我们找到支撑RN的原生类RCTStatusBarManager

为什么会红屏?


现在我们有两种改法,
原生改法
修改 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引起的红屏

找到RN的包
从源码上看,当StatusBar调用隐藏或者style时会红屏,所以请区分对待
getStatusBarFromPlatform = () => {
switch (Platform.OS) {
case 'ios':
return <View></View>
case 'android':
return <StatusBar backgroundColor={statusBarColor} translucent={true} barStyle={statusBarStyle} animated={animated} hidden={statusBarHidden} />
}
}
网友评论