如何在Xamarin.Forms中创建类似于Facebook应用程序的标签页

Gáb*_*kás 5 c# tabbar navigationbar xamarin.forms

我正在使用Xamarin.Forms,我想创建一个类似于Facebook应用程序的导航方法,以及其他不同应用程序的更新版本.这是两张图片,一张是Android上的Facebook应用程序,另一张是KakaoTalk,也是在Android上.

Android上的Facebook应用

Android上的KakaoTalk应用程序

我已经尝试了几种不同的方法来实现它.例如,我将MainPage(TabbedPage)包装在NavigationPage中.我还尝试在NavigationPage中包装MainPage(ContentPage)然后调用

PushAsync(new TabbedPage());
Run Code Online (Sandbox Code Playgroud)

通过该Navigation属性在MainPage内.我还尝试将MainPage(TabbedPage)的子项包装在单独的NavigationPage中.这些尝试都没有产生预期的效果.

我希望以下情况发生.当用户点击按钮或导航到另一个页面的东西时,我希望ContentPage弹出所有内容(包括标签栏),导航栏(或操作栏)除外.显然,这通过该PushAsync()方法发生,该方法还导致导航栏中出现小的后退箭头.我的理解是,PushAsync()调用将所选页面推送到NavigationPage提供的导航堆栈.因此,如果TabbedPage被包装在NavigationPage中,则新的ContentPage将无法像在上面提到的两个应用程序中一样弹出选项卡.

这个以及所述应用程序的标签栏没有进入横向模式的ActionBar(在Android中)这一事实让我相信我想要实现的最好不要使用TabbedPage,而是像标签栏,例如也许是水平的按钮堆栈.

有没有人使用Xamarin.Forms以正确的方式正确实现这一点?所以再一次,我想让这个标签像导航一样,标签停留在横向模式下的ActionBar下面,当推到导航堆栈上时,新标签出现在标签前面(隐藏它们).你认为这可以用Custom Renderer来完成吗?当然在iOS中这些都是使用标签完成的,但在Android中我不确定.

我想要的不一定是代码示例,而是这个问题的最佳实践.再次,这是在Xamarin.Forms与一个常见的PCL项目和一个Android和iOS项目.提前感谢您的答案和建议!

PS:我之前很明显搜索过这个网站(谷歌也是如此),但我没有找到关于这个问题的真实文章.

Ale*_*Lau 1

我的理解是 PushAsync() 调用将所选页面推送到 NavigationPage 提供的导航堆栈上。因此,如果 TabbedPage 包装在 NavigationPage 内,则新的 ContentPage 将无法像上面提到的两个应用程序那样在选项卡前面弹出。

这实际上是不正确的。根据Xamarin API 文档,该Navigation属性是上下文感知的,即它将找到其所有父级,直到出现NavigationPage.

在 Android 中,只允许使用一个 NavigationPage,因此即使您PushAsync()在 内部调用TabbedPage,它仍然会通过您的包装进行推送NavigationPage

  • 是的,嗯,这是真的:D 谢谢你。事实上,从那时起我就找到了答案。我在 Android 中使用 ViewPager,在 iOS 中使用选项卡。我认为这个问题没有一个通用的代码解决方案能够按照我想要的方式运行。 (2认同)