C# 使用Xamarin在Android和iOS上实现正常和黑暗模式,无需Flash。Forms 4.3.0.947036
在对进行了一些讨论之后,我们需要打开一个新问题,以获取其答案,因为在iOS中发现了一个问题C# 使用Xamarin在Android和iOS上实现正常和黑暗模式,无需Flash。Forms 4.3.0.947036,c#,xamarin.forms,xamarin.android,xamarin.ios,C#,Xamarin.forms,Xamarin.android,Xamarin.ios,在对进行了一些讨论之后,我们需要打开一个新问题,以获取其答案,因为在iOS中发现了一个问题 问题: 尝试此操作并对结果进行故障排除后,iOS无法正常工作。虽然Android工作正常,但App()中下面的代码似乎无法正确用于iOS,因为我显然无法在App()中设置等待功能,这是在导航时获得正确颜色所必需的 Theme theme = await DependencyService.Get<IEnvironment>().GetOperatingSystemTheme(); 以及尝试
问题: 尝试此操作并对结果进行故障排除后,iOS无法正常工作。虽然Android工作正常,但
App()
中下面的代码似乎无法正确用于iOS,因为我显然无法在App()
中设置等待功能,这是在导航时获得正确颜色所必需的
Theme theme = await DependencyService.Get<IEnvironment>().GetOperatingSystemTheme();
以及尝试将其用于iOS时的问题:
用这个,我得到了一个
System.NullReferenceException Message=对象引用未设置为对象的实例”。在“UIViewController rootController=UIApplication.SharedApplication.KeyWindow.RootViewController”行
如果您没有在App()
中调用它,而是仅在App.OnStart()
中调用它,则会出现此问题
故障排除结果:
无论应用程序中的默认设置是什么,当导航发生时都会闪烁,换句话说,在页面呈现为暗模式之前,默认的白色背景会闪烁。在调用页面之前(即SomePage()
)设置默认值(所需背景的任何颜色。例如,App.Current.Resources=new DarkModeTheme()
,用于深色页面)会得到正确的结果,因为在进行导航和呈现页面之前必须这样做
示例存储库:问题
UIApplication.SharedApplication.KeyWindow
为空,因为Xamarin.Forms尚未生成它
解决方案
将调用从Xamarin.Forms.Application
的构造函数移动到UIApplication.SharedApplication.KeyWindow
,以Xamarin.Forms.Application.OnStart()
我还向您发送了一份PR,该PR实现了此修复,并正确地实现了您的光明主题和黑暗主题的合并:@Julipan谢谢。忘了那些格式选项。你能编辑问题并从App.cs添加代码吗?@brandonminick updated;但是,示例存储库当前未针对iOS进行测试。明天将进行测试,因为我目前无法访问Mac。它在iOS上正常工作。然而,要删除Android上的Flash,还需要额外的功能。如果(Device.RuntimePlatform==Device.Android){Theme-systemThemeAsync=GetOperatingSystemThemeAsync().Result;InitializeComponent();MainPage=new-NavigationPage(new-MainPage(systemThemeAsync));}否则{InitializeComponent();MainPage=new-NavigationPage(new-MainPage());}谢谢@Jakar510!你能把这个评论也添加到Xamarin.Forms GitHub问题上吗?现在您知道了修复方法,它将帮助团队并节省一些时间进行故障排除。