在Xamarin.Forms Shell中隐藏tabbedPage的标题

时间:2019-07-04 14:53:31

标签: c# xaml xamarin.forms

我正在使用Xamarin.Forms 4.0发布的shell将项目重构为新的导航,现在我正在迁移具有effect的tabbedPage 应用于从tabbedPage隐藏子项的标题而仅使图标可见的情况下,使用Shell,不再需要页面继承自TabbedPage,除非Shell自己的类允许您实现tabbedPage,masterPage ...问题在于,由于无法引用tabbedPage,现在我不知道如何应用以前使用的effect

注意:在这种情况下,我使用Flyout,因为我需要一个带有汉堡菜单和tabbedPage的设计,这就是为什么我不只使用TabBar的原因。 / p>

<FlyoutItem Route="home"
            Title="TEST"
            Icon="home_icon"
            FlyoutDisplayOptions="AsMultipleItems">
    <ShellContent Route="bottomtab1"
                  Title="TEST1"
                  Icon="target_icon"
                  ContentTemplate="{DataTemplate views:x}" />
    <ShellContent Route="bottomtab2"
                  Title="TEST2"
                  Icon="user_login"
                  ContentTemplate="{DataTemplate views:y}" />
</FlyoutItem>

TabbedPage Image

MasterPage Image

1 个答案:

答案 0 :(得分:0)

感谢GitHub的pfedotovsky用户,在Xamarin团队正式解决此问题之前,我找到了一个替代解决方案,in this article他对此进行了解释。

有一个针对带有自定义渲染器的Android解决方法。关键是要设置

_bottomView.LabelVisibilityMode = LabelVisibilityMode.LabelVisibilityAuto;要么 _bottomView.LabelVisibilityMode = LabelVisibilityMode.LabelVisibilityUnlabeled;

using Android.OS;
using Android.Support.Design.BottomNavigation;
using Android.Support.Design.Widget;
using Android.Views;
using Xamarin.Forms.Platform.Android;

namespace App.Droid
{
    public class AndroidShellItemRenderer : ShellItemRenderer
    {
        BottomNavigationView _bottomView;

        public AndroidShellItemRenderer(IShellContext shellContext) : base(shellContext)
        {
        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var outerlayout = base.OnCreateView(inflater, container, savedInstanceState);

            _bottomView = outerlayout.FindViewById<BottomNavigationView>(Resource.Id.bottomtab_tabbar);
            _bottomView.LabelVisibilityMode = LabelVisibilityMode.LabelVisibilityAuto;

            return outerlayout;
        }
    }
}

要使用此渲染器,还需要创建自定义ShellRenderer:

using System;
using Android.Content;
using Conference.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(Shell), typeof(AndroidShellRenderer))]
namespace App.Droid
{
    public class AndroidShellRenderer : ShellRenderer
    {
        public AndroidShellRenderer(Context context)
            : base(context)
        {
        }

        protected override IShellItemRenderer CreateShellItemRenderer(ShellItem shellItem)
        {
            return new AndroidShellItemRenderer(this);
        }
    }
}