如何将 MKMapView 转为暗模式?

How can I turn the MKMapView for dark mode?

如何将地图从 iOS13 更改为深色模式?

我已选择退出 UserInterfaceStyle,因此系统范围的颜色将不适用于我,因此我将手动完成。

我看过这个来自 apple WWDC2019 - Session 236, at 8:19s 的视频,但那是快照,我没看懂。

实际上我正在尝试类似的东西:

private var mapView: MKMapView!

override func viewDidLoad() {
    super.viewDidLoad()
    mapView.backgroundColor = .black       
}

但它不会将主题或外观或 traitCollection 更改为深色。

有什么建议吗?

这就是您在 viewDidLoad 上所需要的

if #available(iOS 13.0, *) {
    self.overrideUserInterfaceStyle = .dark
}

如果您是来这里寻找 macOS 解决方案的(像我一样),只需更新 MKMapView 上的外观 属性:

if #available(OSX 10.14, *) {
    mapView.appearance = NSAppearance(named: .darkAqua) // .aqua for default mode
}

在 viewDidLoad 方法上设置 overrideUserInterfaceStyle 将强制该视图控制器使用您指定的所需模式。

 if #available(iOS 13.0, *) {
     overrideUserInterfaceStyle = .light
 }

MapSnapShot

如果您尝试拍摄快照并与输出图像颜色混淆使用

 if #available(iOS 13.0, *) {
     mapSnapshotOptions.traitCollection = traitCollection
 }

MKMapSnapshotter 的完整代码

func mapCamera(location : CLLocationCoordinate2D )-> MKMapSnapshotter {
    let mapSnapshotOptions = MKMapSnapshotter.Options()
       
    let region = MKCoordinateRegion(center: location, latitudinalMeters: 500, longitudinalMeters: 500)
    mapSnapshotOptions.region = region
    mapSnapshotOptions.scale = UIScreen.main.scale
    mapSnapshotOptions.size = AppConstants.Size.mapDetailView
    mapSnapshotOptions.showsBuildings = true
    mapSnapshotOptions.showsPointsOfInterest = true
    if #available(iOS 13.0, *) {
        mapSnapshotOptions.traitCollection = traitCollection
    }
    return MKMapSnapshotter(options: mapSnapshotOptions)
}