如何将MKMapView设置为暗模式



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

我已经选择退出UserInterfaceStyle,所以系统范围的颜色将不适用于我,所以我将手动执行。

我在8:19看到了苹果WWDC2019-会话236的这段视频,但那是快照,我没有得到。

事实上,我在尝试类似的东西:

private var mapView: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
mapView.backgroundColor = .black       
}

但它并没有将主题、外观或traitCollection改变为黑暗。

有什么建议吗?

这是您在viewDidLoad 上所需要的

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

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

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

MapSnapShot

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

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

MKMapSnapshoter 的完整代码

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)
}

如果你在这里搜索macOS解决方案(像我一样(,只需更新MKMapView:上的外观属性

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