Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Xamarin在Android和iOS上实现正常和黑暗模式,无需Flash。Forms 4.3.0.947036_C#_Xamarin.forms_Xamarin.android_Xamarin.ios - Fatal编程技术网

C# 使用Xamarin在Android和iOS上实现正常和黑暗模式,无需Flash。Forms 4.3.0.947036

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中发现了一个问题


问题:

尝试此操作并对结果进行故障排除后,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问题上吗?现在您知道了修复方法,它将帮助团队并节省一些时间进行故障排除。