先上两个图:
这是一个RN页面,出现问题:RN页面的导航栏上被覆盖了,最后通过查看xcode的hierarchy发现,是被原生的UINavaigationBar是遮住了,红色是RN的导航栏。
项目背景:
出现这个问题的原因是,由于有个功能是纯原生实现的,代码中有RN页面到原生的跳转,因此在AppDelegate.m中增加了一个原生的UINavigationController,并且navigationBarHidden = NO; 这么做导致的结果是,包括RN在内的所有页面都将展示一个空白的UINavigationBar。解决该问题有以下几个方法:
1、在AppDelegate中设置navigationBarHidden = Yes;进入原生页面ViewWillAppear中设置navigationBarHidden = NO;退出原生页面时,ViewWillDisappear中设置navigationBarHidden = YES;
如果还有下一级原生页面,这个时候可以在dealloc里边设置navigationBarHidden = YES;这样原生的NavigationBar只影响原生,不影响RN页面
2、但如果由于项目本身的某些原因,1种的方法解决不了问题,那么可以采用RN和原生通信的方式来设置双方的导航栏。
比如本项目中需要在进入到原生页面前就设置好navigationBarHidden的属性,这个时候就不能在原生页面的ViewWillAppear中设置了;而是需要原生暴露一个方法给RN,RN在跳转原生前就调用这个方法。
网友评论