Xamarin.Forms 警告:尝试使用 iOS 图像/手势识别器在其视图不在窗口层次结构中的 * 上呈现 *
Posted
技术标签:
【中文标题】Xamarin.Forms 警告:尝试使用 iOS 图像/手势识别器在其视图不在窗口层次结构中的 * 上呈现 *【英文标题】:Xamarin.Forms Warning: Attempt to present * on * whose view is not in the window hierarchy with iOS image/gesture recogniser 【发布时间】:2016-12-20 11:40:32 【问题描述】:我有一个模态导航页面,其中包含一个类似于按钮的图像;
<Image Source ="share.png" HeightRequest="32" WidthRequest="32">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="On_Share" />
</Image.GestureRecognizers>
</Image>
以及背后的方法;
async void On_Share(object sender, EventArgs e)
if (CrossConnectivity.Current.IsConnected)
var message = "Share this";
var title = "Share";
await CrossShare.Current.Share(new ShareMessage Text = message, Title = title, new ShareOptions ExcludedUIActivityTypes = new[] ShareUIActivityType.PostToFacebook );
else
NoInternetLabel.IsVisible = true;
当我尝试单击共享图像/按钮时出现错误。我在 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 方法的开头之前。我在这里错过了什么?
编辑:该方法现在确实受到影响,但我仍然遇到错误。它一定是试图发送共享表并且失败了......
【问题讨论】:
【参考方案1】: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);
我已经在github 上提出了这个问题并提交了一个拉取请求
【讨论】:
以上是关于Xamarin.Forms 警告:尝试使用 iOS 图像/手势识别器在其视图不在窗口层次结构中的 * 上呈现 *的主要内容,如果未能解决你的问题,请参考以下文章
无法调试在 Xamarin.Forms 中制作的 IOS 应用程序
Xamarin.Forms iOS 依赖服务中的触觉反馈崩溃