使用 React Native 隐藏在 TabBarIOS 后面的内容

Content hidden behind TabBarIOS with React Native

我正在使用 React Native 构建一个 iOS 应用程序并正在实现一个 TabBarIOS。选项卡上的内容似乎在后面流动并被栏遮挡。在 xcode 中,我会取消选中 "extend edges" 框,但我不确定如何使用 React Native 执行此操作。

这是我正在尝试做的事情的缩略版。 CreateUser 中的 <View> 在标签栏后面流动。有没有一种简单的方法可以确保内容不会被标签栏遮挡?

import React from 'react'
import {
  StyleSheet,
  Text,
  TextInput,
  View,
  TouchableHighlight,
} from 'react-native'

export default class TabBar extends React.Component {
  state = {
    selectedTab: 'list'
  }

  render() {
    return (
      <TabBarIOS selectedTab={this.state.selectedTab}
        unselectedTintColor="#ffffff"
        tintColor="#ffe429"
        barTintColor="#294163">

        <TabBarIOS.Item 
          title="My List"
          systemIcon="bookmarks"
          selected={this.state.selectedTab==='list'}
          onPress={() => {
              this.setState({
                  selectedTab: 'list',
              });
          }}
          >
          <CreateUser />
        </TabBarIOS.Item>
      </TabBarIOS>
    );
  }
}


var styles = StyleSheet.create({
  tabContent: {
    flex: 1,
    alignItems: 'center',
  },
  tabText: {
    color: 'darkslategrey',
    margin: 50,
  },
});



export default class CreateUser extends React.Component{

    render(){
        return (
                <View style={styles.container}>
                    <TouchableHighlight style={styles.button}>
                        <Text style={styles.buttonText}>LOG IN</Text>
                    </TouchableHighlight>
                </View>
            )
    }

}



var styles = StyleSheet.create({
    container: {
        flex: 1,
        flexDirection: "column",
        justifyContent: "flex-end",
        alignItems: 'center',
    },
    button: {
        backgroundColor: "#ffe429",
        borderRadius: 3,
        height: 60,
        width: 200,
        margin: 7,
        //flex: 1,
        alignItems: "center",
        justifyContent: "center",
    },
    buttonText: {
        color: "#294163",
    }

})

当我使用 NavigatorIOS 组件然后呈现它的 initialRoute 组件时,这对我来说是一个问题,其中包含一个 TabBarIOS 组件。

如果您的情况属于这种情况,您可以使用 ScrollView 修复它:

  1. 将 flex 布局样式添加到您的 NavigatorIOS:

    <NavigatorIOS
    initialRoute={{
        component: MyView,
        title: 'My View',
    }}
    style={{flex: 1}}
    />
    
  2. 使用滚动视图:

    <TabBarIOS>
    <TabBarIOS.Item
      systemIcon="history"
      title="A Tab">
      <ScrollView>
        <Text>
          Hello World
        </Text>
      </ScrollView>
    </TabBarIOS.Item>
    </TabBarIOS>
    

在我的例子中,我需要将 flex: 1 添加到屏幕顶层 View 的样式道具中。

RN Navigation docs

//MyScreen.tsx

export default () => (
  <View style={{ flex: 1 }}>
  ...
  </View>
)