我在第一页上有一个带有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。
答案 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