Overview
When using SwiftUI Map with .standard(elevation: .realistic) and a globe-style presentation, the map unexpectedly renders as a flat 2D map instead of a 3D globe / realistic terrain view.
In the same view, switching to .hybrid(elevation: .realistic) preserves the expected 3D globe behavior.
This appears to be a rendering bug or regression specific to the .standard style under globe mode, not an app-level issue. The issue is reproducible in my app’s competition map screen and has also been reported by other developers online.
Steps to Reproduce
- Create a SwiftUI Map.
- Bind it to a
MapCameraPosition. - Apply a standard map style with realistic elevation:
.mapStyle(.standard(elevation: .realistic)) - Configure the UI so the user can switch between:
- standard + globe
- hybrid + globe
- Zoom out / interact with the map in globe mode.
Expected Results
Map with .standard(elevation: .realistic) should continue to render with globe / 3D realistic terrain behavior, consistent with realistic elevation support and similar to .hybrid(elevation: .realistic).
Actual Results
When the map style is .standard(elevation: .realistic) in globe mode, the map falls back to a flat 2D-looking representation.
Changing the same map to .hybrid(elevation: .realistic) restores the expected 3D globe rendering.
Regression
Unknown, but this appears to be unintended behavior because:
- realistic elevation is intended to provide realistic terrain / 3D map rendering, and
- there are no overlays in this map configuration that should intentionally force the map into a flat representation.
Minimal Relevant Code From My App
private enum CompetitionMapMode: String, CaseIterable {
case satellite
case explore
func mapStyle(look: CompetitionMapLook) -> MapStyle {
switch self {
case .satellite:
return .hybrid(elevation: look.elevation)
case .explore:
return .standard(elevation: look.elevation)
}
}
}
private enum CompetitionMapLook: String, CaseIterable {
case globe
case flat
var elevation: MapStyle.Elevation {
switch self {
case .globe:
return .realistic
case .flat:
return .flat
}
}
}
Map(position: $cameraPosition, selection: $selectedMapItemID) {
UserAnnotation()
ForEach(mapDisplayItems) { item in
Annotation(
item.title,
coordinate: item.coordinate,
anchor: .bottom
) {
mapAnnotationView(for: item)
}
.tag(item.id)
}
}
.mapStyle(mapModeSelection.mapStyle(look: mapLookSelection))
Why I Believe This Is a Framework Bug
The same Map instance renders correctly in 3D when using:
.hybrid(elevation: .realistic)
but falls back to 2D with:
.standard(elevation: .realistic)
under globe mode.
This suggests the issue is tied specifically to the .standard rendering path in SwiftUI Map / MapKit, rather than camera state, annotations, or location handling.
My map does include annotations, but it does not add overlays that would intentionally flatten realistic terrain.
Environment
- Xcode: Xcode 26.4 (17E192)
- SDK: SDK Version 26.4 (23E237)
- Device: iPhone 17 Pro
- iOS version: iOS 26.5 Beta 2
- Reproducibility: Always
- App type: SwiftUI app using MapKit Map
Additional Notes
- The issue is visible in a production app screen, not only a toy sample.
- The problem appears style-specific:
.standard(elevation: .realistic)→ incorrect 2D fallback.hybrid(elevation: .realistic)→ expected 3D behavior- This makes standard map style unusable for globe presentation in my app.