Thanks to https://developer.apple.com/forums/thread/681591 , I discovered that traitCollection.activeAppearance
is very useful for this purpose.
In SceneDelegate, you can add:
func windowScene(_ windowScene: UIWindowScene, didUpdate previousCoordinateSpace: UICoordinateSpace, interfaceOrientation previousInterfaceOrientation: UIInterfaceOrientation, traitCollection previousTraitCollection: UITraitCollection) {
if #available(macCatalyst 14.0, *) {
let newActiveAppearance = windowScene.traitCollection.activeAppearance
if newActiveAppearance != previousTraitCollection.activeAppearance && newActiveAppearance == .active {
//do stuff
}
}
}
Or in your ViewController, you can add:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
if #available(macCatalyst 14.0, *) {
let newActiveAppearance = traitCollection.activeAppearance
if newActiveAppearance != previousTraitCollection.activeAppearance && newActiveAppearance == .active {
//do stuff
}
}
}