novalabio/react-native-maps-super-cluster

On iOS, after pressing a cluster and zooming, pressing a marker shows it and then quickly hides it

Opened this issue · 2 comments

Reproducible example: https://github.com/findhumane/testmapstouch

  1. git clone https://github.com/findhumane/testmapstouch
  2. cd testmapstouch
  3. npm install
  4. npx expo start --tunnel
  5. Scan the QR code in Expo Go
  6. Tap on the "3" cluster
  7. Move the map over a bit to the left
  8. Tap on the left marker
  9. The callout shows very quickly and then disappears (see demo video below)
  10. However, then, move down and to the right and tap that marker and the callout is persistent, as expected
bug.webm

Some notes:

  1. The above demonstration is with Expo SDK47 and react-native-maps@1.3.2. The problem also happened on SDK46 and react-native-maps@0.31.1. I was waiting to report this until I could upgrade to SDK47 and the newer react-native-maps.
  2. This issue does not happen if react-native-maps-super-cluster is not used (i.e. just react-native-maps and markers).
  3. This has been reproduced on multiple iPhones, old and new.

Any ideas?

I noticed that the develop branch is ahead of master, and I had been forking off of master (to fix some issues integrating with newer versions of Expo). I applied the diff between develop and master and the issue is the same.

Proximate cause and workaround described here: react-native-maps/react-native-maps#4573 (comment)

diff --git a/ios/AirMaps/AIRMapMarker.m b/ios/AirMaps/AIRMapMarker.m
index 65098aa..0d66061 100644
--- a/ios/AirMaps/AIRMapMarker.m
+++ b/ios/AirMaps/AIRMapMarker.m
@@ -267,7 +267,7 @@ NSInteger const AIR_CALLOUT_OPEN_ZINDEX_BASELINE = 999;
     _calloutIsOpen = NO;
     [self setZIndex:_zIndexBeforeOpen];
     // hide the callout view
-    [self.map.calloutView dismissCalloutAnimated:YES];
+    [self.map.calloutView dismissCalloutAnimated:NO];
 
     [self setSelected:NO animated:NO];
     [self.map deselectAnnotation:self animated:NO];