Ich habe eine statische Karte mit einem Marker und möchte immer das Marker-Callout anzeigen.Wie zeige ich Callouts in Airbnb-Karten an?
Einige Leute raten, 's onLayout
zu verwenden, aber das funktioniert seit einiger Zeit nicht mehr.
Ich versuche es mit onRegionChangeComplete
zu lösen, was manchmal funktioniert (es wird einmal oder zweimal aufgerufen), aber in etwa 10% Fällen bleibt es in einer Schleife stecken und wird immer wieder aufgerufen, bis die App abstürzt. Dies geschieht nur unter iOS.
Dies ist mein Code
setMarkerRef = (ref) => {
this.marker = ref
}
showCallout =() => {
this.marker.showCallout()
}
render() {
...
<MapView
style={{...StyleSheet.absoluteFillObject}}
region={{
latitude: latitude,
longitude: longitude,
latitudeDelta: 0.00922,
longitudeDelta: 0.00421,
}}
showsMyLocationButton={false}
showsCompass={false}
showsTraffic={false}
zoomEnabled={false}
rotateEnabled={false}
scrollEnabled={false}
pitchEnabled={false}
onRegionChangeComplete={this.showCallout}
onPress={this.openMap}
>
<MapView.Marker
coordinate={{
latitude: latitude,
longitude: longitude,
}}
title={address}
ref={this.setMarkerRef}
/>
</MapView>
Jede Idee, was mit meinem Ansatz falsch? Hat jemand einen besseren Workaround?
Edit: Ich möchte die Komponente so aussehen, ohne die Benutzerinteraktion. Zeigen Sie einfach eine Karte, eine Markierung und ein Callout an.
Ich bin mir nicht ganz sicher, was Sie zu tun versuchen. Könntest du ein bisschen mehr erklären? Versuchen Sie, einen Callout zu rendern, der ständig in der Mitte der Karte angezeigt wird? –
Hallo, @KaiwenHuang Ich habe meiner Frage ein Bild hinzugefügt. Ich möchte nicht, dass der Benutzer mit der Karte interagieren muss, sondern zeige sie ihnen nur an, wenn das Callout bereits geöffnet ist. –
Ah. Ihre Karte ist also ebenfalls deaktiviert. Also, wann immer Sie Ihren Breiten- und Längengrad aktualisieren, wollen Sie, dass der Marker und das Callout an dieser Koordinate angezeigt werden, habe ich recht? –