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

Xamarin.Forms学习历程(四)——TabBar+Navigation,针对上两期所说的Layout布局中,有一点我想强调一下,我自己也曾经在这个坑里栽过,关于布局Xamarin里只有Padding,没有Margin。虽然官方文档里明确说明可以用Margin,但是我不清楚文档是什么时候的,无论怎么尝试XAML里都不识别Margin。后面还有一些这样的坑,所以看官方文档时,总体方向可以,但有些细枝末节如遇到问题,要相信自己,对官方文档提出些怀疑。真希望能有些大神能站出来,用自己的经历将一些“暗沟”指出来,造福后面的人。

Xamarin.Forms学习历程

好了,不感慨了,咱们进入今天的正题。首先使用TabBar+Navigation的结合体时先看结论,再看正文,可能效果并不是你所需要的。这也是Xamarin的坑点之一吧,我至今还没有爬出来。
Navigation这块都好理解,添加它是为了实现堆栈式的页面结构,主要是push和pop方法。可是对一般的模态界面出现Xamarin用的也是push和pop,这个我在这里给大家区分一下
先说说模态界面的push与pop

Xamarin.Forms学习历程

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

再看看Navigation里界面的push与pop

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

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

本文转载自Snoopy008,原文链接:https://www.jianshu.com/p/b030a111ffbd,本文观点不代表江湖人士立场,转载请联系原作者。

(0)
江小编的头像江小编
上一篇 2018-01-26 09:48
下一篇 2018-01-26 09:58

热门推荐

Leave a Reply

Sending

国外老牌便宜域名服务商Namecheap注册com域名大优惠,抢到就赚到,优惠码:NEWCOM698
$5.98/年
直达官网