问题
- 出于某种原因,在我的旧 Android 手机(Android v 6.0.1)上进行测试时,我的 Expo SDK 36 应用程序的标题总是有额外的填充,看起来太笨重,即使手机没有一流的。
- 在带有缺口的 iPhone 11 的 iOS 13.4 模拟器上进行测试,它可以正确处理缺口。
一些调试结果
- 当我遍历 中的组件层次结构时
react-native-debugger
,我看到:
- 我的
<SafeAreaView />
Screen 组件中的 fromreact-native-safe-area-view
具有来自上下文的正确插入值,{ top: 0, bottom: 0, left: 0, right: 0 }
- 但是,当我检查它以查看它时,
<Header />
来自react-navigation 4.3.7
has的组件safeAreaInsets: { top: 'never' }
props.scene.descriptor.options
navigationOptions
- 而且,如果我进入
<Header/>
的孩子,当我进入 时<SafeView/>
,它props.forceInset.top
就是'always'
。
- 我
react-navigation
今天从 3.13.0 升级到 4.3.7,我想知道是否存在来自早期版本的依赖项(如react-native-safe-area-context
and )的react-native-safe-area-view
错误,或者它们的一般错误。
- 在
package-lock.json
中,我注意到有一个@react-navigation/native
带有at 版本dependency
的软件包,而我注意到在semver range中。我想我在第一次查看 Expo 文档中的 SafeAreaView 说明时,通过与您的 Expo SDK 兼容的软件包的命令安装了它react-native-safe-area-view
0.14.9
package.json
react-native-safe-area-view
^1.0.0
expo install
- 我的渲染方法如下所示:
render() {
return (
<SafeAreaConsumer>
{(insets) => {
console.log("render -> insets", insets)
return (
<SafeAreaView
style={{
flex: 1,
backgroundColor: Color.white,
paddingBottom: insets.bottom,
paddingLeft: insets.left,
paddingRight: insets.right,
}}
forceInset={insets}
>
<View style={MainAppViewContainers.container}>
...
</View>
</SafeAreaView>
)
}}
</SafeAreaConsumer>
);
}
想到的可能解释
- 可能
<SafeAreaView/>
无法自动检测并设置正确的插图?这里它说,“默认情况下,会自动检测设备的安全区域插图。”
- 如果在屏幕/导航器上设置正确的标题相关,使用
forceInset
prop on是否<SafeAreaView/>
无法更改forceInset
prop on <SafeView>
,这是组件的子<Header/>
组件自动生成?react-navigation
navigationOptions
react-native-safe-area-view 0.14.9
安装使用@react-navigation/native 3.7.11
的版本react-navigation 4.3.7
和react-native-safe-area-view 1.0.0
Expo安装的版本之间是否存在某种依赖冲突?