Xamarin 窗体在详细信息页面中隐藏选项卡式页面,但保留后退按钮



我有一个 xamarin 表单 TabbedPage 页面,第一页上有一个列表视图。当我单击列表视图时,我希望能够隐藏选项卡(因为列表视图项将用户带到显示有关该项详细信息的页面。这就是我只希望用户能够按后退按钮返回选项卡式页面的原因(......我该如何实现此目的?

到目前为止,我最接近的是重新分配App.Current.MainPage

ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
App.Current.MainPage= new NavigationPage(new MyNewPage());
}

但是,我失去了我的后退按钮...如何制作详细信息页面、隐藏详细信息页面中的选项卡以及不丢失后退按钮?(这在大多数流行的安卓应用程序中似乎很常见(

描述我正在尝试做的事情的最好例子是在达美航空的"Fly Delta"安卓应用程序中。在主屏幕上,有一个选项卡式页面。当我单击"最近活动"时,我被转到一个没有选项卡的详细信息页面,但详细信息页面有一个后退按钮。当我单击"后退"按钮时,它会将我发送回选项卡式页面。

选项卡式页面

详细信息页面

您必须创建TabbedPage的自定义渲染器,如下所示:

public class CustomTabbedPage : TabbedPage
{
public static readonly BindableProperty TabBarHiddenProperty =
BindableProperty.Create("TabBarHidden", typeof(bool), typeof(CustomTabbedPage), false);
public bool TabBarHidden
{
get { return (bool)GetValue(TabBarHiddenProperty); }
set { SetValue(TabBarHiddenProperty, value); }
}
}
using System;
using yourAppName;
using yourAppName.iOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly:ExportRenderer(typeof(CustomTabbedPage), typeof(CustomTabbedPageRenderer))]
namespace yourAppName.iOS
{
public class CustomTabbedPageRenderer : TabbedRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
this.Tabbed.PropertyChanging += (sender, eventArgs) => {
if (eventArgs.PropertyName == "TabBarHidden" && TabBar.SelectedItem == TabBar.Items[3])
{
bool tabBarHidden = !tmp.TabBarHidden;
TabBar.Hidden = tabBarHidden;
Console.WriteLine(View.Frame.Width + " " + View.Frame.Height);
// The solution to the space left behind the invisible tab bar
if(TabBar.Hidden)
View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y, View.Subviews[1].Frame.Width, 0);
else
View.Subviews[1].Frame = new CoreGraphics.CGRect(View.Subviews[1].Frame.X, View.Subviews[1].Frame.Y, View.Subviews[1].Frame.Width, 49);
}
};

}
}
}

对于安卓,我正在使用这个:https://github.com/thrive-now/BottomNavigationBarXF

最新更新