Xamarin.Forms学习历程(四)——TabBar+Navigation,针对上两期所说的Layout布局中,有一点我想强调一下,我自己也曾经在这个坑里栽过,关于布局Xamarin里只有Padding,没有Margin。虽然官方文档里明确说明可以用Margin,但是我不清楚文档是什么时候的,无论怎么尝试XAML里都不识别Margin。后面还有一些这样的坑,所以看官方文档时,总体方向可以,但有些细枝末节如遇到问题,要相信自己,对官方文档提出些怀疑。真希望能有些大神能站出来,用自己的经历将一些“暗沟”指出来,造福后面的人。
Xamarin.Forms学习历程
好了,不感慨了,咱们进入今天的正题。首先使用TabBar+Navigation的结合体时先看结论,再看正文,可能效果并不是你所需要的。这也是Xamarin的坑点之一吧,我至今还没有爬出来。
Navigation这块都好理解,添加它是为了实现堆栈式的页面结构,主要是push和pop方法。可是对一般的模态界面出现Xamarin用的也是push和pop,这个我在这里给大家区分一下
先说说模态界面的push与pop
CB6CE3A1-FA3D-40AF-8EF0-7F7C97FBE82F.png
再看看Navigation里界面的push与pop
不要用混了。
还是先说TabBar+Navigation混合体吧,我们先看代码
using System; using Xamarin.Forms; namespace TabAndNav { public class MainHomePage:TabbedPage { public MainHomePage () { var nav1 = new NavigationPage(new FirstPage()); nav1.Icon = "tab_1.png" nav1.BarBackgroundColor = Color.FromHex("660000"); nav1.BarTextColor = Color.White; nav1.Title = "Home"; Children.Add (nav1); var nav2 = new NavigationPage (new SecondPage ()); nav2.Icon ="tab_2.png"; nav2.BarBackgroundColor= Color.FromHex("660000"); nav2.BarTextColor = Color.White; nav2.Title = "Creat"; Children.Add (nav2); var nav3 = new NavigationPage (new ThirdPage ()); nav3.Icon = "tab_3.png"; nav3.BarBackgroundColor = Color.FromHex("660000"); nav3.BarTextColor = Color.White; nav3.Title = "Search"; Children.Add (nav3); var nav4 = new NavigationPage (new ForthPage ()); nav4.Icon = "tab_4.png"; nav4.BarBackgroundColor =Color.FromHex("660000"); nav4.BarTextColor= Color.White; nav4.Title ="My"; Children.Add (nav4); } } }
核心代码都在这里了,至于every page的样式我就不展示了。
我的是每个子界面里套了一个Navigation,这样每个子系统里都是一个独立的界面堆栈,通常在iOS里就是这种结构。如果你的图片显示有问题,不要着急,这是正常现象,第一次搞可能都有点小问题。重点在后面:
- 1、iOS里TabBar默认是在底部的,在Android里默认是在顶部
- 2、TabBar是不会随着视图的push和Pop而显示和隐藏TabBar的,因为Xamarin.forms根本就没有提供这样的方法。
- 3、 Navigation右侧按钮是可以自定义的,而左侧按钮是没有设置的
结论###
如果你的需求是这样,那么你可以无所顾虑的使用,但如果不是这样,我想你也不要找了,资源实在有限,只有进入Android和iOS Project分别进行自定义,这种方法比较繁琐。