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

2023-12-08

我有一个模态导航页面,其中包含一个充当按钮的图像;

<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 方法的开头之前出现。我在这里缺少什么?

编辑:该方法现在确实受到攻击,但我仍然收到错误。它一定是试图发送共享表但失败了......


最终 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xamarin.Forms 警告:尝试在其视图不在 iOS 图像/手势识别器的窗口层次结构中的 * 上呈现 * 的相关文章

  • Visual Studio Community 缺少 iOS 11.2.1 的开发人员工具,无法调试

    我正在尝试在调试配置文件下构建和运行 所以我的 Xcode 是最新的9 2 9C40b 检查了应用商店和开发者门户 没有更新 Visual Studio 社区也已更新至7 3 2 build 12 stable channel 仅使用 Xc
  • 使用仪器分配时 iOS 应用程序冻结

    当我想使用 Instruments Allocation 来分析应用程序的内存使用情况时 它在启动后立即冻结 它总是停留在启动屏幕 这是一个 Xamarin forms 应用程序 这是屏幕截图 其他信息 如果我创建一个新项目 然后使用 In
  • 在 Xamarin 中读取 iOS 的相机权限

    我有一个用 Xamarin 开发的 iOS 应用程序 当应用程序没有访问麦克风的权限时 如果用户尝试从应用程序访问麦克风 我会使用以下命令检查设置AVAudioSession SharedInstance RequestRecordPerm
  • 打开位置设置页面或提示用户启用位置

    我一直在绞尽脑汁 徒劳地谷歌搜索 我正在尝试找到一种方法来提示用户通过直接进入设置页面或仅点击屏幕上的 是 来切换位置 我见过的所有代码似乎都不起作用 有人有有效的方法吗 一个详细的例子将不胜感激 谢谢 我对 Xamarin 开发非常陌生
  • 如何在xamarin表单共享项目中检查互联网连接

    如何检查 Xamarin 表单共享项目中的 Internet 是否可用 我们可以在PCL项目中使用交叉连接插件 我们可以在共享项目中使用相同的插件吗 交叉连接插件已被弃用 取而代之的是Xamarin Essentials https git
  • 如何将屏幕截图转换为二进制?

    我正在开发一个 Xamarin Forms 项目 在该项目中我想将我的屏幕截图 PNG 转换为二进制并将其上传到服务器 现在服务器部分需要一个API 我将由已经完成它的人交给我 我只需要实现它 在我完成这个任务之后 到目前为止 我已经成功地
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 录制视频/音频时播放系统声音

    当我开始录制视频时 我试图按照苹果的要求播放 嘟嘟 声 我通过 SO 和其他来源发现 当您有音频输入而没有进行某些配置时 您无法播放声音 这是我尝试的配置方法 private void SetupAudio beepSound AssetB
  • 无法创建本机类型“NSObject”的实例

    我在执行下面的代码时遇到此错误 未能创建本机类型的实例 NSObject 可以通过将 Class ThrowOnInitFailure 设置为 false 来忽略此情况 var alert new UIAlertView Error Som
  • sqlite.net + monotouch = SIGSEGV 崩溃

    我们正在使用以下内容 Xamarin 3 Xamarin 表单 单点触控 sqlite net iOS模拟器 硬件 该应用程序在后台线程上与服务器同步数据 整个应用程序只共享一个 SQLite 连接对象 前台查询在后台同步运行的同时执行 所
  • Android 如何使用意图发送文本和图像或任何对象?

    我知道可以与以下人员分享短信ACTION SEND通过指定Intent EXTRA TEXT 同样的方法适用于图像 Intent EXTRA STREAM 但是如何将文本和图像添加到同一意图呢 您可以通过意图发送文本和图像 例如 如果您要发
  • 没有动画的 Xamarin Forms 导航

    I have an app where I want to show page A from which the user can navigate to page B or C from B back to A or to C and f
  • 启动注册期间无法加载程序集“System.Buffers”

    我的 Xamarin 表单应用程序大约 5 分钟前运行 然后突然停止工作 应用程序启动后立即关闭 下面显示了 Visual Studio 输出中的消息显示 Assembly Loader probing location System Bu
  • UICollectionView 点击选择多个单元格

    当点击 UICollectionView 中的单个 UICell 然后在 UICollectionView 中向下或向上滚动时 我遇到一个奇怪的问题 我看到多个单元格被选中 未点击的其他选定单元格似乎是在整个 UICollectionVie
  • Xamarin-ios 共享和接收音频文件

    如何将我的应用程序中的音频文件共享给其他应用程序并从其他应用程序接收音频文件 I would like a functionality like this 我无法附加音频文件 这是代码片段 var fileData NSUrl FromFi
  • 如何正确绑定和更新 Xamarin.Forms ListView?

    使用 MVVM 模式 我有一个模型 ViewModel 和视图 其中包含一个 ListView ListView 绑定到 ViewModel 的成员 该成员是 Model 类的 ObservableCollection 我可以使初始显示的绑
  • didSelectRowAtIndexPath 与点击手势识别器冲突

    我通过情节提要在 ViewController 中设置了点击手势识别器 因此 如果显示此视图中的所有点击 将隐藏键盘 问题是 现在 我在这个视图中添加了一个 TableView 当我点击一个单元格时 使用点击手势识别器设置的方法是调用 而不
  • 如何在Xamarin.Forms中将多个页面的BindingContext设置为同一个ViewModel?

    我是 Xamarin Forms 新手 我想使用 MVVM 模式和 XAML 创建一个跨平台应用程序 在我的表单项目 pcl 中 我想设置绑定上下文 of my MainPage以及将来的多个页面到同一个 ViewModel 这可能吗 让我
  • MonoTouch - 编辑 xib 时缺少头文件[重复]

    这个问题在这里已经有答案了 我使用的是 Mac OSX Lion 10 7 0 带有适用于 IOS 5 的 Xcode 4 2 和 Xamarin 的 MonoTouch 跨平台移动开发工具 允许您使用 C 和 NET 创建适用于 iOS
  • 点击当前选项卡刷新页面时的 Xamarin.Forms TabbedPage 事件

    我正在使用 Xamarin Forms 构建 iOS Android 应用程序 并有一个 TabbedPage 如果用户已经在选项卡 2 上 并且单击了选项卡 2 并且我希望刷新选项卡 2 或者运行我自己的函数 以便我可以自己刷新它 有没有

随机推荐