You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI Shell中如何将自定义启动屏设为入口且不显示在TabBar

解决MAUI AppShell中启动屏作为入口且不显示在TabBar的问题

方案一:将启动屏设为应用初始页面,完成逻辑后切换到AppShell

这种方式最直接,无需在AppShell内额外配置启动屏:

  1. 在App.xaml.cs中,把初始MainPage设置为SplashPage:
public App()
{
    InitializeComponent();
    MainPage = new SplashPage();
}
  1. 在SplashPage的业务逻辑(比如OnAppearing方法)中完成用户检查:
protected override async void OnAppearing()
{
    base.OnAppearing();
    // 替换为你的实际用户检查逻辑
    bool hasUser = await CheckUserExistsAsync();

    if (hasUser)
    {
        // 用户存在,切换到带TabBar的AppShell
        Application.Current.MainPage = new AppShell();
    }
    else
    {
        // 无用户,跳转登录页,可根据需求用NavigationPage包裹
        Application.Current.MainPage = new NavigationPage(new LoginPage());
        // 登录成功后,再切换到AppShell即可
    }
}

方案二:在AppShell中注册启动屏路由,启动时导航到启动屏

如果希望保留AppShell作为根容器,可通过Shell路由实现:

  1. 在AppShell.xaml中,仅在TabBar内添加需要展示的业务标签页,单独注册启动屏的ShellContent(不要放到TabBar里):
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       xmlns:pages="clr-namespace:YourAppName.Pages"
       x:Class="YourAppName.AppShell">

    <!-- TabBar仅包含业务标签页 -->
    <TabBar>
        <Tab Title="首页" Icon="home_icon.png" Route="Home">
            <ShellContent ContentTemplate="{DataTemplate pages:HomePage}" />
        </Tab>
        <Tab Title="我的" Icon="profile_icon.png" Route="Profile">
            <ShellContent ContentTemplate="{DataTemplate pages:ProfilePage}" />
        </Tab>
    </TabBar>

    <!-- 单独注册启动屏,不纳入TabBar -->
    <ShellContent Route="Splash" ContentTemplate="{DataTemplate pages:SplashPage}" />
    <!-- 可选:注册登录页路由 -->
    <ShellContent Route="Login" ContentTemplate="{DataTemplate pages:LoginPage}" />
</Shell>
  1. 在AppShell.xaml.cs的构造函数中,注册路由并启动时导航到启动屏:
public AppShell()
{
    InitializeComponent();
    // 显式注册路由(xaml已设置Route可省略,显式注册更清晰)
    Routing.RegisterRoute("Splash", typeof(SplashPage));
    Routing.RegisterRoute("Login", typeof(LoginPage));
    
    // 启动时直接导航到启动屏
    _ = Shell.Current.GoToAsync("//Splash");
}
  1. 在SplashPage中完成用户检查后,导航到对应页面:
protected override async void OnAppearing()
{
    base.OnAppearing();
    bool hasUser = await CheckUserExistsAsync();

    if (hasUser)
    {
        // 导航到首页Tab,//表示根路由,对应Tab的Route值
        await Shell.Current.GoToAsync("//Home");
    }
    else
    {
        // 导航到登录页
        await Shell.Current.GoToAsync("//Login");
    }
}

关键注意点

  • 绝对不要把SplashPage的ShellContent放到TabBar内部,否则会生成空白Tab选项。
  • 登录成功后,记得切换回AppShell或直接导航到TabBar的标签页,确保TabBar正常显示。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:23:09