这变成了一个巨大的冒险,随后,一个非常大和混乱的帖子,所以为了让你不必阅读我在下面放屁的混乱,这里是一个总结:
Main goal:找到一种方法,在我的应用程序中有 Select 地显示导航栏,而不必有 Select 地删除安全区域填充,以防止我的内容被iPhone X缺口截取.
Why I did it the way I did:我想try 使用导航栏内置的安全区域填充,而不是react native的<SafeAreaView>
,因为<SafeAreaView>
会干扰内置填充,并导致标题过高.
Side effect of not doing it the standard way:当标题和内容的 colored颜色 相同时,标题(如图中height: 0
所示)和内容之间有一条模糊的线清晰可见
What I tried:
- 使用
<SafeAreaView>
- 不使用
<SafeAreaView>
,而是try 使用header: null
(又名"推荐方法") -
播放标题选项,使标题消失,而不会导致剪辑内容.作为副作用(引自下面的扩展帖子)
我还发现
header: null
在功能上与 玩
borderColor
和borderWidth
来确定它是否是边界(事后看来,我应该做得更彻底)- 玩"不透明"
- 用
position: 'relative', top: 6
左右移动标题和内容 - 在Xcode中重新创建这个问题,看看它是否是iOS问题(事后看来:我做错了)
这很清楚地引出了答案,所以我将在这里把它删掉,并在我的答案中继续.
The long, confusing, original version
我在我的react-native 项目(使用CRNA创建)中使用react-navigation ,我想我已经找到了一种方法来设置StackNavigator
的标题样式,这样iOS就可以为您提供安全区域,并且不需要使用<SafeAreaView>
(这会干扰其他屏幕上的标题).
我的应用程序是这样安排的,第一个屏幕有点像一个主屏幕,有一个按钮网格,最终每个按钮都有自己的页面.在这个主屏幕上,我想禁用标题栏,因为没有可导航的内容,它只是向下移动内容.然而,在其他屏幕上,我想让标题栏可见,以显示后退按钮.使用<SafeAreaView>
时,我只能得到上面提到的两个屏幕中的一个,要么主屏幕被iPhone X上的凹口剪掉,要么<SafeAreaView>
将其他屏幕上的导航/标题栏向下移动,占据了空间.
然而,我发现,通过完全抛弃<SafeAreaView>
,我能够使用react navigation的标题样式重新创建我想要的内容:
App.js
const Navigation = createStackNavigator({
Home: HomeScreen,
Test: PageScreen,
},
{
headerMode: 'screen',
navigationOptions: {
headerStyle: { backgroundColor: colors.background},
headerTintColor: colors.headerTint,
headerTitleStyle: {
fontWeight: 'bold',
},
}
});
HomeScreen.js
static navigationOptions = {
headerStyle: {
height: 0,
backgroundColor: colors.background //had to re-color it here too because otherwise the header would be white???
},
};
这样做效果很好,因为它可以有效地从主屏幕中删除标题,但仍然保留标题创建的安全区域填充.然而,现在有一条细线将标题与主屏幕内容分开,我不知道如何使其消失.这是唯一的东西,让我的标题欺骗和减损的用户体验.
以下是我要说的:
这不会影响我希望标题可见的其他屏幕:显然是这样, colored颜色 只是掩盖了它...
在使用expo测试应用程序时,这句话也出现在我的iPhone 8上,不过由于该设备上的状态栏较小,这句话没有那么低.
我已经try 过在navigationOptions
中更改headerTintColor
,因为我认为在我设置的headerTintColor
后面可能有某种背景色,但显然它控制着文本和后退按钮的 colored颜色 .互联网似乎也没有太多关于这一点的信息,我可以立即告诉大家,搜索header line react-navigation
会得到关于隐藏标题、无法隐藏标题以及如何自定义标题的结果.Does anyone know what this line is and how I remove it?或失败,如何使<SafeAreaView>
发挥良好的StackNavigator
的导航标题?
EDIT:我也try 过header: null,
解决方案,但是,通过删除应用程序主页上的标题,而不是其他导致<SafeAreaView>
产生奇怪的副作用,<SafeAreaView>
的安全区域添加到已经内置到iOS标题中的安全区域,导致标题比应该的大得多,这就是为什么我 Select 了height: 0
,因为它使标题实际上不可见,但仍然保持它的安全区域.
EDIT 2:在玩了头球的borderColor
和borderWidth
之后,我确定这条线不是边界...
headerStyle: {
height: 400,
backgroundColor: 'green',
borderColor: 'red',
borderWidth: 150,
},
EDIT 3:更多发现.在使用CSS后,我发现设置opacity: 0
会在导航栏后面显示一个白色层...也许这比导航栏本身大一点?
而且,header: null
和headerTransparent: 'true'
在功能上是一样的,我后来发现,它和display: 'none'
在功能上也是一样的.所有这些似乎都是使整个标题、安全区域填充和所有内容消失的有效方法.
将其改为position: 'relative', top: 6
似乎也无法解决这个问题
EDIT 4:
EDIT 4a:为了证实这个理论,我创建了一个纯本地的xcode项目,并试图通过将导航栏和视图设置为黑色来重新创建这个项目,与我的预期相反,这个问题并没有重新生成.所以这确实是react native创建的东西,没有内置到iOS中我再次站出来更正...How to remove navigation bar border/shadow?