如何将 MKMapView 设为暗模式?

Mar*_*hex 3 mapkit swift ios13 ios-darkmode

如何将地图从iOS 13更改为暗模式?

我已从 UserInterfaceStyle 中选择退出,因此系统范围的颜色不适用于我,所以我将手动进行。

我在8:19看过苹果WWDC2019 - Session 236 的这段视频,但那是快照,我没看懂

实际上我正在尝试类似的事情:

private var mapView: MKMapView!

override func viewDidLoad() {
    super.viewDidLoad()
    mapView.backgroundColor = .black       
}
Run Code Online (Sandbox Code Playgroud)

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

有什么建议吗?

Mar*_*hex 11

这是您在 viewDidLoad 上需要的

if #available(iOS 13.0, *) {
    self.overrideUserInterfaceStyle = .dark
}
Run Code Online (Sandbox Code Playgroud)


dip*_*dip 5

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

 if #available(iOS 13.0, *) {
     overrideUserInterfaceStyle = .light
 }
Run Code Online (Sandbox Code Playgroud)

地图快照

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

 if #available(iOS 13.0, *) {
     mapSnapshotOptions.traitCollection = traitCollection
 }
Run Code Online (Sandbox Code Playgroud)

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)
}
Run Code Online (Sandbox Code Playgroud)