Swift 4中如何为MKMapView设置类似GoogleMap的深色主题样式?
如何给MKMapView设置深色主题
嘿,这个问题我刚好研究过!在MKMapView里实现深色主题其实有几种不同的方式,看你是想要跟随系统自动切换,还是自定义完全个性化的深色样式,下面给你详细拆解:
方法1:跟随系统暗黑模式(最简单,iOS 13+)
如果你的App已经适配了iOS的暗黑模式,MKMapView会自动跟着系统外观切换深浅色样式,几乎不用额外写代码。不过要注意两个小细节:
- 确保项目的
Info.plist里没有把UIUserInterfaceStyle固定设为Light; - 如果之前给MapView强制过外观样式,记得把它改回跟随系统:
// Swift 代码 mapView.overrideUserInterfaceStyle = .unspecified
// Objective-C 代码 mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified;
要是你想让这个MapView始终显示深色,不管系统怎么设置,直接把样式设为dark就行:
mapView.overrideUserInterfaceStyle = .dark
mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
方法2:自定义深色地图样式(更灵活)
如果系统自带的深色样式不够对你胃口,比如想调整道路颜色、水域深浅这类细节,那可以用自定义的地图样式JSON文件来实现:
步骤分解:
- 生成样式JSON:你可以用Apple官方的MapKit样式编辑器(或者第三方工具)制作符合要求的深色主题JSON文件,导出后保存到本地。
- 添加文件到项目:把JSON文件拖进Xcode,勾选对应的target确保能被加载到。
- 加载样式到MapView:用
MKMapConfiguration来应用自定义样式:
// Swift 代码 if let styleURL = Bundle.main.url(forResource: "DarkCustomStyle", withExtension: "json") { let standardConfig = MKStandardMapConfiguration(styleURL: styleURL) let mapConfig = MKMapConfiguration() mapConfig.preferredConfiguration = standardConfig mapView.configuration = mapConfig }
// Objective-C 代码 NSURL *styleURL = [[NSBundle mainBundle] URLForResource:@"DarkCustomStyle" withExtension:@"json"]; MKStandardMapConfiguration *standardConfig = [[MKStandardMapConfiguration alloc] initWithStyleURL:styleURL]; MKMapConfiguration *mapConfig = [[MKMapConfiguration alloc] init]; mapConfig.preferredConfiguration = standardConfig; mapView.configuration = mapConfig;
注意事项
- 自定义样式需要iOS 13及以上版本支持,如果你的App还要兼容iOS 12及更早版本,那只能通过切换
mapType(比如改成MKMapTypeHybrid)来近似深色效果,没法做真正的自定义样式; - 系统自动适配的方式更符合iOS的设计规范,用户体验更统一;自定义样式则能完全掌控地图的视觉风格,适合有特殊设计需求的场景。
内容的提问来源于stack exchange,提问作者Ekta Padaliya
相关产品推荐
相关产品推荐

