Xamarin.Forms学习历程(四)——TabBar+Navigation

针对上两期所说的Layout布局中,有一点我想强调一下,我自己也曾经在这个坑里栽过,关于布局Xamarin里只有Padding,没有Margin。虽然官方文档里明确说明可以用Margin,但是我不清楚文档是什么时候的,无论怎么尝试XAML里都不识别Margin。后面还有一些这样的坑,所以看官方文档时,总体方向可以,但有些细枝末节如遇到问题,要相信自己,对官方文档提出些怀疑。真希望能有些大神能站出来,用自己的经历将一些“暗沟”指出来,造福后面的人。
好了,不感慨了,咱们进入今天的正题。首先使用TabBar+Navigation的结合体时先看结论,再看正文,可能效果并不是你所需要的。这也是Xamarin的坑点之一吧,我至今还没有爬出来。
Navigation这块都好理解,添加它是为了实现堆栈式的页面结构,主要是push和pop方法。可是对一般的模态界面出现Xamarin用的也是push和pop,这个我在这里给大家区分一下
先说说模态界面的push与pop

CB6CE3A1-FA3D-40AF-8EF0-7F7C97FBE82F.png

再看看Navigation里界面的push与pop

Snip20160824_1.png

不要用混了。
还是先说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分别进行自定义,这种方法比较繁琐。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,180评论 4 61
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,508评论 7 249
  • 浙江,甬江,一夜满天霜! 红颜,芬芳,恍然陌上桑! 金樽,关防,游子相忆长! 清辉,冷月,金甲耀寒光! 干一杯,悠悠逸昶
    珞木阅读 216评论 2 2
  • 如何把混乱的魔方还原?或许你会跟曾经的我有一样的想法,认为这是一项十分烧脑的活动,直到有一天,一位朋友跟我说,魔方...
    张春天阅读 3,605评论 1 1
  • 今天一个下午做了一个ppt。
    烟涩寒阅读 65评论 0 0