Xamarin表单隐藏详细信息页面中的TabbedPage但保留后退按钮

时间:2017-07-20 15:30:01

标签: xamarin.forms

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

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

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

然而,我丢失了我的后退按钮...如何制作详情页面,隐藏详细信息页面中的标签,而不是丢失我的后退按钮? (在大多数流行的Android应用程序中似乎都很常见)

描述我想要做的最好的例子是Delta的“Fly Delta”Android应用程序..在主屏幕上,有一个TabbedPage。当我单击“最近活动”时,我被发送到没有选项卡的详细信息页面,但详细信息页面有一个后退按钮。当我单击后退按钮时,它会将我发送回TabbedPage。

TabbedPage

Details Page

1 个答案:

答案 0 :(得分:0)

您必须创建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);

                }
            };


        }
    }
}

对于Android,我使用的是:https://github.com/thrive-now/BottomNavigationBarXF