Xamarin.ios Xamarin.Forms警告:尝试使用iOS图像/手势识别器在其视图不在窗口层次结构中的*上显示*

Xamarin.ios Xamarin.Forms警告:尝试使用iOS图像/手势识别器在其视图不在窗口层次结构中的*上显示*,xamarin.ios,xamarin.forms,share,uitapgesturerecognizer,Xamarin.ios,Xamarin.forms,Share,Uitapgesturerecognizer,我有一个模式导航页面,页面上的图像就像一个按钮 <Image Source ="share.png" HeightRequest="32" WidthRequest="32"> <Image.GestureRecognizers> <TapGestureRecognizer Tapped="On_Share" /> </Image.GestureRecognizers> </Image> 当我尝试单击共

我有一个模式导航页面,页面上的图像就像一个按钮

<Image Source ="share.png" HeightRequest="32" WidthRequest="32">
    <Image.GestureRecognizers>
        <TapGestureRecognizer Tapped="On_Share" />
    </Image.GestureRecognizers>
</Image>
当我尝试单击共享图像/按钮时出现错误。我已经在On_Share方法的第一行中设置了断点&它们没有被击中

Warning: Attempt to present <UIActivityViewController: 0x141b60f70> on <Xamarin_Forms_Platform_iOS_ModalWrapper: 0x1419a0920> whose view is not in the window hierarchy!
警告:尝试显示其视图不在窗口层次结构中的对象!
请注意,这在Android中运行良好,我只在iOS中看到问题。我不确定发生了什么-我没有试图在单击图像时显示任何其他窗口或任何东西。无论如何,在进程到达On_Share方法的开始之前会出现错误。我错过了什么


编辑:这个方法现在确实被击中了,我仍然得到了错误。它一定是试图发送共享表,但失败了…

最后共享插件出现了问题-我们通过使部分代码递归来解决它

GetVisibleViewController过去看起来像这样

UIViewController GetVisibleViewController()
{
    var rootController = UIApplication.SharedApplication.KeyWindow.RootViewController;

    if (rootController.PresentedViewController == null)
        return rootController;

    if (rootController.PresentedViewController is UINavigationController)
    {
        return ((UINavigationController)rootController.PresentedViewController).VisibleViewController;
    }

    if (rootController.PresentedViewController is UITabBarController)
    {
        return ((UITabBarController)rootController.PresentedViewController).SelectedViewController;
    }

    return rootController.PresentedViewController;
}
然而,它需要循环查找顶级UIViewController

UIViewController GetVisibleViewController(UIViewController controller = null)
{
    controller = controller ?? UIApplication.SharedApplication.KeyWindow.RootViewController;

    if (controller.PresentedViewController == null)
        return controller;

    if (controller.PresentedViewController is UINavigationController)
    {
        return ((UINavigationController)controller.PresentedViewController).VisibleViewController;
    }

    if (controller.PresentedViewController is UITabBarController)
    {
        return ((UITabBarController)controller.PresentedViewController).SelectedViewController;
    }

    return GetVisibleViewController(controller.PresentedViewController);
}
我已经提出了这个问题,并在

UIViewController GetVisibleViewController(UIViewController controller = null)
{
    controller = controller ?? UIApplication.SharedApplication.KeyWindow.RootViewController;

    if (controller.PresentedViewController == null)
        return controller;

    if (controller.PresentedViewController is UINavigationController)
    {
        return ((UINavigationController)controller.PresentedViewController).VisibleViewController;
    }

    if (controller.PresentedViewController is UITabBarController)
    {
        return ((UITabBarController)controller.PresentedViewController).SelectedViewController;
    }

    return GetVisibleViewController(controller.PresentedViewController);
}