我在<{1}}内部StackNavigator
和ScrollView
一起呈现导航期间保持不变的其他组件。但是,当在具有小屏幕的手机上观看时,会发生StackNavigator
组件变得足够小以适应屏幕,从而隐藏我的一些内容,而不是允许滚动发生。我的代码看起来像这样(删除了无关的细节):
const Navigator = StackNavigator ({
splash: { screen: Splash },
prompt: { screen: Prompt },
...
}, {
initialRouteName: 'splash',
headerMode: "none",
cardStyle: {
backgroundColor: "transparent",
flex: 1
}
});
...
render () {
return (
<KeyboardAvoidingView style={{... flex: 1 ...}}>
<ScrollView
style={{... flex: 1 ...}}
contentContainerStyle={{
flexGrow: 1,
justifyContent: "space-around",
alignItems: "center"
}}>
[other items here]
<Navigator />
</ScrollView>
</KeyboardAvoidingView>
);
}
Splash
组件非常小 - 它只呈现单行文本 - 但当它被Prompt
(更大)替换时,我希望Navigator
按顺序展开允许ScrollView
滚动查看Prompt
中的所有内容,但不会这样做 - 内容会在屏幕底部被截断,无法滚动。
使用react-devtools
查看组件的层次结构显示了一个令人眼花缭乱的不同组件阵列被注入到布局中:Navigator
依次扩展为:
NavigationContainer
Navigator
(看似与我自己的名字无关)Unknown
”对象CardStackTransitioner
Transitioner
View
(及其嵌入的RCTView
)CardStack
View
s Container
个,其中每个都包含:Card
AnimatedComponent
View
SceneView
天真地看起来我似乎需要将flexGrow
样式应用于所有这些中间级别以使其工作,但我没有看到任何控制大多数样式的选项他们。如何根据需要扩展StackNavigator以启用滚动?
答案 0 :(得分:0)
StackNavigator(或者反应导航提供的其他导航器)不打算在ScrollViews中渲染。
很难说你的目标是什么,但StackNavigator应该是你应用的顶级组件,而不是像你提供的代码片段那样嵌套。
我的建议是创建显示内容的屏幕组件(这些屏幕组件可以包含ScrollView)。然后将屏幕放到StackNavigator并渲染创建的StackNavigator。