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 中存储视图

Xamarin Forms MvvM框架之FreshMvvM翻译一

如何将 MVVMCross 与 C# 的标记绑定