MvvmCross с помощью Xamarin.Формы и пользовательское средство визуализации iOS — предотвращают прокрутку навигации iOS — MasterDetail

#ios #xamarin #xamarin.forms #mvvmcross #master-detail

#iOS #xamarin #xamarin.forms #mvvmcross #мастер-деталь

Вопрос:

Короче говоря, я хочу отключить жест прокрутки в навигации для iOS в шаблоне MvvmCross по умолчанию. Было проведено множество исследований и испытаний, но безуспешно. Это для личного проекта с открытым исходным кодом, над которым я работаю. Спасибо!!!

Подробности: использование MvvmCross 7.1.6 (последняя версия от 1/21/2021). Я реализовал MvxContentPage. На странице есть 2 джойстика. На странице также включен гамбургер, который я хочу. При использовании приложения на телефоне при перемещении джойстика появляется всплывающее окно с левой навигацией. Я исследовал все, что смог найти, и добился успеха с Xamarin.Формы отключают жест, но в MvvmCross я не могу найти способ предотвратить слайд. Я знаю, что на других форумах были похожие сообщения, но не нашел ничего, что работает. Я смог создать пользовательский средство визуализации, используя сообщение Xamarin от 2016 года, но, похоже, оно не выполняется (код ниже). Я могу подтвердить, что средство визуализации вызвано.

 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();
        }

       
    }
}
 

Комментарии:

1. Не могли бы вы попробовать UINavigationController navctrl2 = this.NavigationController; ?

2. @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 amp;amp; navigationPage.CurrentPage is MasterDetailPage nestedMasterDetail)
            {
                nestedMasterDetail.IsGestureEnabled = false;
            }
        }

       
    }
}