xamarin.forms - 适用于 iOS 的 Xamarin.Forms 使用 SceneDelegate.cs
问题描述
在 iOS 13 中,使用了 UIScene。必须将 AppDelegate.cs 中的代码移至 SceneDelegate.cs 以支持拆分视图中同一应用的多个窗口。
对于 Xamarin.Forms,AppDelegate.cs 使用 LoadApplication (new App()) 在 Xamarin.Forms 中启动 App.cs 的实例。LoadApplication 位于 Xamarin.Forms.Platform.iOS.FormsApplicationDelegate 中。
在 SceneDelegate.cs 中启动 Xamarin.Forms 中的 App.cs 实例的等效项是什么?
解决方案
从xamrin forms的应用程序生命周期:
- iOS –
Main method > AppDelegate > App > ContentPage
. - 安卓——
MainActivity > App > ContentPage
我们之前会看到Main method
调用App
类,如果需要iOS的App实例,一般会尝试如下:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init();
LoadApplication(new App(app)); // pass app to Forms
return base.FinishedLaunching(app, options);
}
但是,表格不能使用UIKit
(错误截图)。
在 xamarin 表单中,有DependencyService来加载本地方法。因此,建议使用DependecyServiceapp
从 iOS native调用AppDelegate.cs
。
关于SceneDelegate.cs
在 Xamarin Forms 中使用,现在 iOS 解决方案中没有SceneDelegate.cs
文件。我将检查是否可以在 Xamarin Forms 中使用。
===================================更新=============== ================
如果要处理中的通用链接AppDelegate.cs
,您需要在continueUserActivity
方法中执行以下操作:
public override bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
{
//return base.ContinueUserActivity(application, userActivity, completionHandler);
if(userActivity.ActivityType == NSUserActivityType.BrowsingWeb)
{
NSUrl url = userActivity.WebPageUrl;
// other code
}
return true;
}
===================================更新=============== =================
最后,发现可以添加SceneDelegate
到一个Xamarin Forms项目中。新的 Xamarin Forms 项目不附带必要的SceneDelegate.cs
文件或 .storyboard 文件,因此需要添加这些文件。添加这些文件后,需要使用密钥更新info.plistUIApplicationSceneManifest
,其中将包含更多需要的密钥。
添加的内容info.plist
如下所示:https : //docs.microsoft.com/en-us/xamarin/ios/platform/ios13/multi-window-ipad#project-configuration(只是 UIApplicationSceneManifest 和下面的所有内容)
需要注意的两点是:
- 当应用程序的多个窗口运行时,该示例存在导航正常工作的问题。
- 这不是官方示例,因为 Xamarin.Forms 目前不提供官方支持以将多个场景与 iOS 应用程序一起使用。
非官方的 Xamarin.Forms 示例在这里:https ://www.dropbox.com/s/sdxq5me7vcdmuf9/XamFormsiOSMultiWindow.rar?dl=0