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

MAUI页面隐藏底部导航栏后恢复显示时出现异常求助

问题分析与解决方案

你的代码存在两个核心问题导致异常和恢复逻辑失效:

  1. 重复注册WeakReferenceMessenger消息处理器,引发重复执行逻辑的异常
  2. 恢复导航栏时的SystemUiFlags组合错误,同时方法名大小写不符合C#规范

修正步骤

1. 统一MainActivity中的消息处理逻辑

不要重复注册HideBottomOptions消息,将隐藏/恢复逻辑合并到同一个处理器中:

public class MainActivity : MauiAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        WeakReferenceMessenger.Default.Register<HideBottomOptions>(this, (recipient, message) =>
        {
            if (message.Value == "hide")
            {
                // 隐藏底部导航栏+状态栏,启用沉浸式粘性模式
                Window.DecorView.SystemUiVisibility = (StatusBarVisibility)(
                    SystemUiFlags.ImmersiveSticky |
                    SystemUiFlags.HideNavigation |
                    SystemUiFlags.Fullscreen
                );
            }
            else if (message.Value == "show")
            {
                // 恢复底部导航栏和状态栏的正常显示
                Window.DecorView.SystemUiVisibility = (StatusBarVisibility)(
                    SystemUiFlags.Visible |
                    SystemUiFlags.LayoutStable
                );
            }
        });
    }
}

2. 修正页面的OnDisappearing方法

C#是大小写敏感语言,你之前的ondisappearing不会被系统正确调用,改为标准写法:

protected override void OnDisappearing()
{
    base.OnDisappearing();
    WeakReferenceMessenger.Default.Send(new HideBottomOptions("show"));
}

3. 确保HideBottomOptions消息类正确实现

如果还未定义该类,添加如下代码:

public class HideBottomOptions : MessageBase
{
    public string Value { get; }

    public HideBottomOptions(string value)
    {
        Value = value;
    }
}

关键说明

  • 移除重复的消息注册:多次注册同一类型消息会导致每次发送消息时执行多次逻辑,引发异常
  • 修正SystemUiFlags组合:恢复时不要保留HideNavigation标记,使用Visible确保导航栏正常显示
  • 方法名大小写:OnDisappearing是MAUI页面的生命周期方法,必须严格遵循大小写规范才能被系统触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:03:39