代码之家  ›  专栏  ›  技术社区  ›  Jules

React navigation StackNavigator-允许卡中的场景扩展到可用空间之外

  •  0
  • Jules  · 技术社区  · 6 年前

    我正在渲染 StackNavigator 在…内 ScrollView 在导航期间保持不变的其他组件旁边。然而,当在带有小屏幕的手机上观看时,所发生的是 堆栈导航器 组件变得足够小,可以放在屏幕上,从而隐藏了我的一些内容,而不允许滚动。我的代码如下所示(删除了无关的详细信息):

    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 展开以允许 卷轴视图 滚动查看中的所有内容 促使 ,但事实并非如此-内容在屏幕底部被切断,无法滚动。

    查看组件的继承权 react-devtools 显示了正在注入布局的不同组件的令人困惑的阵列: 导航器 依次展开为:

    • NavigationContainer
    • 导航器 (似乎与我自己的同名对象无关)
    • an“ Unknown “对象
    • CardStackTransitioner
    • Transitioner
    • View (及其嵌入式 RCTView )
    • CardStack
    • 还有两个 看法 s
    • 一双 Container s、 每一个都包含:
    • Card
    • AnimatedComponent
    • 另一个 看法
    • SceneView
    • 最后是我的组件。

    天真的是,我似乎需要申请 flexGrow 为了实现这一点,我对所有这些中间级别的样式进行了调整,但我看不到任何选项可以控制其中大多数的样式。如何让StackNavigator根据需要展开以启用滚动?

    1 回复  |  直到 6 年前
        1
  •  0
  •   vonovak    6 年前

    StackNavigator(或react navigation提供的其他导航器)不打算在ScrollView中呈现。

    很难说您的目标是什么,但StackNavigator应该是应用程序的顶级组件,而不是像您提供的代码片段那样嵌套。

    我的建议是创建显示内容的屏幕组件(这些屏幕组件可以包括滚动视图)。然后将屏幕放置到StackNavigator并渲染创建的StackNavigator。