From bc64c51cab9c479e63211e2d8796509b0f3ddec7 Mon Sep 17 00:00:00 2001 From: Thomas Han Date: Fri, 3 Apr 2026 20:10:38 +1300 Subject: [PATCH 1/2] - fix: preserve maxPitch when updating camera bounds for Android - fix: maxPitch prop in iOS Fabric component view not getting propagated from javascript --- .../java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt | 3 +++ ios/RNMBX/RNMBXMapViewComponentView.mm | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt b/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt index 2bd4079bd..a471e13ca 100644 --- a/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt +++ b/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt @@ -182,10 +182,13 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame private fun updateMaxBounds(mapView: RNMBXMapView) { val map = mapView.getMapboxMap() + val currentBounds = map.getBounds() val builder = CameraBoundsOptions.Builder() builder.bounds(mMaxBounds?.toBounds()) builder.minZoom(mMinZoomLevel ?: 0.0) // Passing null does not reset this value. builder.maxZoom(mMaxZoomLevel ?: 25.0) // Passing null does not reset this value. + builder.minPitch(currentBounds.minPitch) + builder.maxPitch(currentBounds.maxPitch) map.setBounds(builder.build()) mCameraStop?.let { updateCamera(it, mapView) } } diff --git a/ios/RNMBX/RNMBXMapViewComponentView.mm b/ios/RNMBX/RNMBXMapViewComponentView.mm index 6ee6808cd..f079b89e6 100644 --- a/ios/RNMBX/RNMBXMapViewComponentView.mm +++ b/ios/RNMBX/RNMBXMapViewComponentView.mm @@ -192,6 +192,11 @@ - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared & RNMBX_REMAP_OPTIONAL_PROP_BOOL(rotateEnabled, reactRotateEnabled) RNMBX_REMAP_OPTIONAL_PROP_BOOL(pitchEnabled, reactPitchEnabled) + + id maxPitch = RNMBXConvertFollyDynamicToId(newViewProps.maxPitch); + if (maxPitch != nil) { + _view.reactMaxPitch = maxPitch; + } RNMBX_REMAP_OPTIONAL_PROP_NSDictionary(gestureSettings, reactGestureSettings) From 104a0447072bd407bc11b3e609e2942df1a916ad Mon Sep 17 00:00:00 2001 From: Thomas Han Date: Fri, 3 Apr 2026 20:22:04 +1300 Subject: [PATCH 2/2] - add min/max pitch settings when camera bounds are updated --- ios/RNMBX/RNMBXCamera.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ios/RNMBX/RNMBXCamera.swift b/ios/RNMBX/RNMBXCamera.swift index 191bfe54e..bc3f6321a 100644 --- a/ios/RNMBX/RNMBXCamera.swift +++ b/ios/RNMBX/RNMBXCamera.swift @@ -331,8 +331,9 @@ open class RNMBXCamera : RNMBXMapAndMapViewComponentBase { func _updateMaxBounds() { withMapView { map in + let current = map.mapboxMap.cameraBounds var options = CameraBoundsOptions() - + if let maxBounds = self.maxBoundsFeature { logged("RNMBXCamera._updateMaxBounds._toCoordinateBounds") { options.bounds = try self._toCoordinateBounds(maxBounds) @@ -342,7 +343,9 @@ open class RNMBXCamera : RNMBXMapAndMapViewComponentBase { } options.minZoom = self.minZoomLevel?.CGFloat options.maxZoom = self.maxZoomLevel?.CGFloat - + options.minPitch = current.minPitch + options.maxPitch = current.maxPitch + logged("RNMBXCamera._updateMaxBounds") { try map.mapboxMap.setCameraBounds(with: options) }