Hiding Top Navigations Bar in one of the shell tabs

954 views Asked by At

I've been trying to achieve hiding Top Navigations Bar in one of the shell tabs with no success.

I tried following this Tutorial with no success (might be outdated ?).

Here is my code :

<Shell
    x:Class="Smogon_MAUIapp.AppShell"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:Smogon_MAUIapp"
    Shell.FlyoutBehavior="Disabled">


    <!--Main Page-->
    <TabBar>

        <Tab Icon="Resources/navbar/smogon.png" Shell.NavBarIsVisible="False" >
            <ShellContent
                Shell.NavBarIsVisible="False"
                NavigationPage.HasNavigationBar="False"
                ContentTemplate="{DataTemplate local:Pages.MainPage}" 
                Route="MainPage">
            </ShellContent>
            <ShellContent
                Shell.NavBarIsVisible="False"
                NavigationPage.HasNavigationBar="False"
                ContentTemplate="{DataTemplate local:Pages.Forum}"
                Route="Forum"/>
            <ShellContent
                Shell.NavBarIsVisible="False"
                NavigationPage.HasNavigationBar="False"
                ContentTemplate="{DataTemplate local:Pages.SubForum}"
                Route="SubForum"/>
            <ShellContent
                Shell.NavBarIsVisible="False"
                NavigationPage.HasNavigationBar="False"
                ContentTemplate="{DataTemplate local:Pages.Thread}"
                Route="Thread"/>
        </Tab>

        <Tab Icon="Resources/Images/search.png" Shell.NavBarIsVisible="False">
            <ShellContent
                ContentTemplate="{DataTemplate local:Pages.Search}" 
                Route="Search">
            </ShellContent>
        </Tab>

        <Tab Icon="Resources/Images/snorlax.png" Shell.NavBarIsVisible="False">
            <ShellContent
                ContentTemplate="{DataTemplate local:Pages.Profile}" 
                Route="Profile" />
        </Tab>

        <Tab Icon="Resources/Images/showdown.png" Shell.NavBarIsVisible="False">
            <ShellContent
                ContentTemplate="{DataTemplate local:Pages.Showdown}" 
                Route="Showdown" />
        </Tab>

    </TabBar>

</Shell>

and the code behind :

public partial class AppShell : Shell
{
    public AppShell()
    {
        Routing.RegisterRoute("Home", typeof(MainPage));
        Routing.RegisterRoute("Forum", typeof(Forum));
        Routing.RegisterRoute("SubForum", typeof(SubForum));
        Routing.RegisterRoute("Thread", typeof(Smogon_MAUIapp.Pages.Thread));
        Routing.RegisterRoute("Search", typeof(Search));
        Routing.RegisterRoute("Profile", typeof(Profile));
        Routing.RegisterRoute("ShowDown", typeof(Showdown));

        InitializeComponent();
    }
}

Here is a screenshot of what I am getting and what I'd like : Gotten result Vs Wanted one

Help would be appreciated ! =)

I tried removing the top bar of one of my tabs in my shell. But i could only remove the titles and the bar is still there.

Update 1 :

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Smogon_MAUIapp.Pages.Forum"
             Title="Forum"
             Shell.NavBarIsVisible="False">
    <VerticalStackLayout>
    </VerticalStackLayout>
</ContentPage>

I did that but it didn't change anything =)

3

There are 3 answers

0
Александр On
 <TabBar>
    <Tab Shell.NavBarIsVisible="False">
</TabBar>

It's works! 100%!

0
Julian On

In your Pages, e.g. your Forum.xaml, you could set Shell.NavBarIsVisible="False" to hide the navigation bar, e.g.:

<ContentPage
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    Shell.NavBarIsVisible="False">
    <!-- ... -->
</ContentPage>

This should be done in the ContentPage. It works fine for me like that using tabs: enter image description here

Side note: NavigationPage is not supported when using Shell, therefore you can safely remove NavigationPage.HasNavigationBar="False" from your Shell definition, because it's obsolete.

3
H.A.H. On

This is NOT the NavigationBar on the picture.

Actually, your code is working perfectly and the bar is hidden.

Each Tab is ShellSection, and if this ShellSection has more than one Item in the list of ShellContents, this bar appears, so change between them becomes possible.

If you want, you can change your XAML to "true" and you will see another blue line appear above the one you are concerned about.

This will be the actual NavigationBar.

This aside, what really bothers me is why you add several ShellContents, and want to remove the only way to switch between them.

If you want custom navigation, you do not have to put them inside the TabBar. You can put them under it (just like separate Shell Items) and then navigate to them normally.

Edit: Please notice in the accepted answer of the link you gave, how the programmer is not adding every single ShellContent at once, but is using custom navigation events, and using a reference of its Tab for adding/removing them one by one, so that this bar does not render.