反应原生空白 MapView

Posted

技术标签:

【中文标题】反应原生空白 MapView【英文标题】:React Native Blank MapView 【发布时间】:2019-09-25 15:45:20 【问题描述】:

我开始“学习” React Native,我看到的第一个教程使用了<MapView /> 组件。我尝试了不同的方式来显示地图,但我无法做到。

根据视频本身,它从expo 导入MapView。但在世博会现场阅读了一些documentation 之后,我将导入更改为react-native-maps。错误发生了变化,但根本没有地图。

当从 expo 导入 MapView 时,我收到 Invariant Violation 错误。但是当从react-native-maps 导入它时,我在 androidios 模拟器上得到一个空白屏幕。

我发现这个在线实时编辑器带有自己的 iOS/Android/Web 模拟器。这是示例:https://snack.expo.io/B1H3VWtDH

这是代码。它有两行...

import React from 'react';
import  Text, View  from 'react-native';
import MapView from 'react-native-maps';

function App() 
  const [region, setRegion] = React.useState(
    latitude: -30.8501718,
    longitude: -50.1700368,
    latitudeDelta: 0.922,
    longitudeDelta: 0.0421
  )

  return (
    <View>
      <Text>Map screen</Text>
      <MapView
        initialRegion=region
        style= flex: 1 
      />
    </View>
  );


export default App;

怎么了?任何 cmets 将不胜感激。

【问题讨论】:

请在app.json中设置apiKey。并在 console.developers.google.com/apis/library 启用 Maps SDK for Android 和 Maps SDK for iOS 【参考方案1】:

在做了“一些”研究之后,我能够通过向容器和地图本身添加 CSS-in-JS 属性来修复它:

根据this issue's 在 GitHub 上的回复,它对我有用。

import React from 'react';
import  StyleSheet, Text, View  from 'react-native';
import MapView from 'react-native-maps';

function App() 
  const [region, setRegion] = React.useState(
    latitude: -30.8501718,
    longitude: -50.1700368,
    latitudeDelta: 0.922,
    longitudeDelta: 0.0421
  )

  return (
    <View style=styles.container>
      <Text>Pantalla de inicio</Text>      
      <MapView
        initialRegion=region
        showsUserLocation=true
        showsCompass=true
        rotateEnabled=true
        style=styles.map 
      />
    </View>
  );


export default App;

const styles = StyleSheet.create(
  container: 
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
    top: 0, 
    left: 0, 
    right: 0, 
    bottom: 0, 
    position: 'absolute'
  ,
  map: 
    top: 0, 
    left: 0, 
    right: 0, 
    bottom: 0, 
    position: 'absolute'
  
);

【讨论】:

【参考方案2】:

我遇到了同样的问题,MapView 显示为空白。

我添加了一个样式:

style=styles.mapStyle

到 MapView 并且它可以工作!

import  StatusBar  from 'expo-status-bar';
import React from 'react';
import MapView,  PROVIDER_GOOGLE  from 'react-native-maps';
import  StyleSheet, Text, View, Dimensions  from 'react-native';

export default function App() 
  return (
    <View style=styles.container>
      <MapView
         style= flex: 1 
         provider= PROVIDER_GOOGLE 
         showsUserLocation
          initialRegion=
          latitude: 37.78825,
          longitude: -122.4324,
          latitudeDelta: 0.0922,
          longitudeDelta: 0.0421
          style=styles.mapStyle
      />
      <StatusBar translucent="false" barStyle="light-content"/>
    </View>
  );


const styles = StyleSheet.create(
  container: 
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  ,
  mapStyle: 
    width: Dimensions.get('window').width,
    height: Dimensions.get('window').height,
  ,
);

【讨论】:

以上是关于反应原生空白 MapView的主要内容,如果未能解决你的问题,请参考以下文章

反应原生 textInput scrollView android

电话不显示反应原生(世博会)上的所有文本

如何使用反应原生 WebView 在模式中显示网页?

相机不显示,状态转换问题,反应原生

在拍摄多张照片时反应原生路由器通量和反应原生相机问题

运行时反应故事书空白页