Xamarin.Forms 警告:尝试使用 iOS image/gesture 识别器在视图不在 window 层次结构中的 * 上呈现 *
Xamarin.Forms Warning: Attempt to present * on * whose view is not in the window hierarchy with iOS image/gesture recogniser
我有一个模态导航页面,其中的图像就像一个按钮;
<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;
}
}
我在尝试单击共享时遇到错误 image/button。我已将断点放入 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 中看到问题。我不确定发生了什么 - 我并没有尝试在单击图像时显示任何其他 windows 或任何内容。无论如何,错误出现在进程到达 On_Share 方法的开头之前。我在这里错过了什么?
编辑:该方法现在确实被击中了,但我仍然遇到错误。它一定是在尝试发送共享 sheet 但失败了...
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
上提交了拉取请求
我有一个模态导航页面,其中的图像就像一个按钮;
<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;
}
}
我在尝试单击共享时遇到错误 image/button。我已将断点放入 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 中看到问题。我不确定发生了什么 - 我并没有尝试在单击图像时显示任何其他 windows 或任何内容。无论如何,错误出现在进程到达 On_Share 方法的开头之前。我在这里错过了什么?
编辑:该方法现在确实被击中了,但我仍然遇到错误。它一定是在尝试发送共享 sheet 但失败了...
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
上提交了拉取请求