xamarin .Net MAUI iOS向后滑动导航不适用于常规页面导航流

f2uvfpb9  于 11个月前  发布在  .NET
关注(0)|答案(1)|浏览(124)

我目前在我的应用程序中使用标准导航方法而不是Shell导航。我打算将iOS向后滑动导航纳入其中,希望它在默认情况下发挥作用。然而,它并没有像预期的那样工作。我遇到了一些讨论这个问题的线程,例如:
https://learn.microsoft.com/en-us/answers/questions/1143556/how-to-disable-the-swipe-back-in-ios-using-net-mau?sort=votes
我试图在下面的页面上使用此代码来启用向后滑动导航,但不幸的是,它没有按预期运行:
所以我现在的导航流程是这样的:

MainPage = new NavigationPage(new Page1());

字符串

来自第1页:

async void Button_Clicked(System.Object sender, System.EventArgs e)
{
    await Navigation.PushAsync(new Page2());
}

On Page2's OnAppearing():

protected override void OnAppearing()  
{  
    base.OnAppearing();  
#if IOS  
    UINavigationController vc = (UINavigationController)Platform.GetCurrentUIViewController();//using UIKit, find the UINavigationController  
    vc.InteractivePopGestureRecognizer.Enabled = true;  
#endif  
}

**更新:**如果我将Page2的HasNavigationBar属性设置为False,就会发生这种情况

NavigationPage.HasNavigationBar="False"

brjng4g3

brjng4g31#

更新:
如果没有更好的解决方案,您可以尝试此变通方法。
对于Page2.xaml.cs文件
在OnAppearing方法中,对Navigationbar进行一些更改

protected override void OnAppearing()
{
    base.OnAppearing();

#if IOS
    UINavigationController vc = (UINavigationController)Platform.GetCurrentUIViewController();//using UIKit, find the UINavigationController  
    vc.NavigationBar.Hidden = true;
    CoreGraphics.CGRect frame = vc.NavigationBar.Frame;
    vc.NavigationBar.Frame = new CoreGraphics.CGRect(frame.X,frame.Y - frame.Height,frame.Width,0);
#endif
}

字符串
在OnDisappearing方法中,只需将其设置回,

protected override void OnDisappearing()
{
    base.OnDisappearing();
#if IOS
    UINavigationController vc = (UINavigationController)Platform.GetCurrentUIViewController();//using UIKit, find the UINavigationController  
    vc.NavigationBar.Frame = new CoreGraphics.CGRect(barX,barY,barWidth,barHeight);
    vc.NavigationBar.Hidden = false;
#endif
}


通过这种方式,回扫手势将不会被禁用,并且页面顶部没有空间。
正如@Himanshu Dwivedi所说,删除NavigationBar会禁用向后滑动手势。
不使用NavigationPage.HasNavigationBar="False",而是使用

#if IOS  
    UINavigationController vc = (UINavigationController)Platform.GetCurrentUIViewController();//using UIKit, find the UINavigationController  
    vc.InteractivePopGestureRecognizer.Enabled = true;  
    vc.NavigationBar.Hidden = true;
#endif


回刷是iOS默认的行为,您不需要在OnAppearing方法中设置以下代码,

#if IOS  
    UINavigationController vc = (UINavigationController)Platform.GetCurrentUIViewController();//using UIKit, find the UINavigationController  
    vc.InteractivePopGestureRecognizer.Enabled = true;  
#endif


但我相信这可能与模拟器或XCode的一些设置有关。请确保选择Show Device Bezels选项。

注意:如果您使用pair to mac,它可能无法工作。这可能是由于pair to mac的限制。但如果您在mac上使用模拟器,它应该可以工作。

x1c 0d1x的数据
另一种方法是,您可以将其部署到物理设备iPhone上,以检查滑动返回导航是否有效。

相关问题