MvvmCross 与 Xamarin.Forms 和自定义 iOS 渲染器 - 防止导航滑动 iOS - MasterDetail
Posted
技术标签:
【中文标题】MvvmCross 与 Xamarin.Forms 和自定义 iOS 渲染器 - 防止导航滑动 iOS - MasterDetail【英文标题】:MvvmCross with Xamarin.Forms and Custom iOS Renderer - Prevent Nav Swipe iOS - MasterDetail 【发布时间】:2021-04-26 02:19:13 【问题描述】:简而言之,我希望在 MvvMCross 默认模板中禁用 ios 导航上的滑动手势。进行了大量的研究和试验,但没有成功。这是针对我正在从事的个人/开源项目的。谢谢!!!
详情: 使用 MvvmCross 7.1.6(最新于 2021 年 1 月 21 日)。我已经实现了一个 MvxContentPage。该页面上有 2 个操纵杆。该页面还打开了我想要的汉堡包。在手机上使用该应用程序时,移动操纵杆时会出现左侧导航弹出窗口。我已经研究了我能找到的所有东西,并且在 Xamarin.Forms 禁用手势方面取得了成功,但在 MvvmCross 中我找不到阻止滑动的方法。我知道其他论坛上也有类似的帖子,但没有发现任何有效的东西。我能够使用 2016 年的 Xamarin 帖子构建自定义渲染器,但它似乎不成立(代码如下)。我可以确认渲染器已被调用。
using AstromechControl.iOS.CustomRenderers;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(AstromechControl.UI.Pages.JoystickPage), typeof(NoSwipeiOSCustomPageRenderer))]
namespace AstromechControl.iOS.CustomRenderers
public class NoSwipeiOSCustomPageRenderer : PageRenderer
public override void ViewDidAppear(bool animated)
base.ViewDidAppear(animated);
UINavigationController navctrl = ViewController.NavigationController;
navctrl.InteractivePopGestureRecognizer.Enabled = false;
ViewController.SetNeedsUpdateOfScreenEdgesDeferringSystemGestures();
【问题讨论】:
你可以试试UINavigationController navctrl2 = this.NavigationController;
吗?
@JackHua-MSFT 感谢您的注意,但不,这没有用...感谢任何其他想法!
【参考方案1】:
好吧,如果有人在 2021 年仍然想解决这个问题……这就是解决办法…… https://github.com/MvvmCross/MvvmCross/issues/2306
使用我在上面发布的自定义页面渲染器和这个 github 链接的组合。我最终得到以下结果:
using AstromechControl.iOS.CustomRenderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(AstromechControl.UI.Pages.JoystickPage), typeof(NoSwipeiOSCustomPageRenderer))]
namespace AstromechControl.iOS.CustomRenderers
public class NoSwipeiOSCustomPageRenderer : PageRenderer
public override void ViewDidAppear(bool animated)
if (Xamarin.Forms.Application.Current.MainPage is MasterDetailPage masterDetailPage)
masterDetailPage.IsGestureEnabled = false;
else if (Xamarin.Forms.Application.Current.MainPage is NavigationPage navigationPage && navigationPage.CurrentPage is MasterDetailPage nestedMasterDetail)
nestedMasterDetail.IsGestureEnabled = false;
【讨论】:
以上是关于MvvmCross 与 Xamarin.Forms 和自定义 iOS 渲染器 - 防止导航滑动 iOS - MasterDetail的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Xamarin Forms Shell 集成到 MvvmCross 设置中
Xamarin Forms + Mvvmcross绑定命令不起作用
mvvmcross xamarin.forms PictureChooser
在 Xamarin.Forms MvvmCross 中存储视图