iOS13より前の端末でUITraitCollectionを使うと落ちる
2021年11月8日
この前Xamarin.Formsのダークテーマ対応でAppThemeBindingを使うようにしたで端末のダークモード設定に関わらずダークモードにできるようにしたのはいいが、iPhone5sで起動しなくなっていた。
iOSバージョンは、12.4.8
12.5.5が来てたのでバージョンアップしたが、起動中に落ちる。
1 |
Foundation.MonoTouchException: Objective-C exception thrown. Name: NSInvalidArgumentException Reason: +[UITraitCollection currentTraitCollection]: unrecognized selector sent to class 0x1e0e6cb30 |
UITraitCollectionが無い?らしい。
iOS13以降じゃないとないっぽいので、OSバージョン判定するようにした。
この前のDependencyService
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
public class SystemThemeService : ISystemThemeService { public Theme GetTheme() { if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0)) { return UITraitCollection.CurrentTraitCollection.UserInterfaceStyle switch { UIUserInterfaceStyle.Dark => Theme.Dark, _ => Theme.Light }; } else { return Theme.Light; } } public void SetTheme(Theme theme, bool restart = false) { if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0)) { UIApplication.SharedApplication.KeyWindow.OverrideUserInterfaceStyle = theme switch { Theme.Dark => UIUserInterfaceStyle.Dark, Theme.Light => UIUserInterfaceStyle.Light, _ => UITraitCollection.CurrentTraitCollection.UserInterfaceStyle }; } } } |
とりあえず起動はできた。
ListViewの背景とか部分的に変わってない箇所あるんだよな~。