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

SwiftUI & Mac Catalyst:导航栏右侧按钮添加及导航栏移除问题

Mac Catalyst应用导航栏问题解决指南

一、解决导航栏右侧按钮不显示的问题

  • 核心原因:navigationBarItems在iOS 16(对应Mac Catalyst Ventura)及以上版本已被官方废弃,改用toolbar才是当前标准写法;另外你代码里的导航栏显示隐藏逻辑也可能和按钮显示冲突。
  • 修复步骤:
    1. 替换navigationBarItems为toolbar:在HomeView中修改代码如下
      #if targetEnvironment(macCatalyst)
      .toolbar {
          ToolbarItem(placement: .navigationBarTrailing) {
              NavButtons
          }
      }
      #endif
      
    2. 修正导航栏显示逻辑:确保在Mac Catalyst环境下导航栏处于显示状态,避免按钮被隐藏。可以调整HomeView里的navigationBarHidden代码:
      .navigationBarHidden(isMac ? false : true)
      // 若需针对Ventura+单独适配,可改为:
      .navigationBarHidden(!(isMac && ProcessInfo.processInfo.isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 13, minorVersion: 0, patchVersion: 0))) ? true : false)
      
    3. 检查NavigationView层级:在columns样式下,主视图的导航配置需正确关联,避免侧边栏的导航设置覆盖主视图的按钮。

二、移除Ventura系统专属导航栏

这个导航栏是Mac Catalyst在Ventura上新增的默认导航栏,由NavigationView的columns样式触发,可通过以下方式移除:

  • 全局隐藏Mac Catalyst导航栏:在AppSidebarNavigation的init方法中添加配置:
    init() {
        #if targetEnvironment(macCatalyst)
        UINavigationBar.appearance().isHidden = true
        #endif
        
        #if !targetEnvironment(macCatalyst)
        UITableView.appearance().backgroundColor = UIColor(named: "White")
        UITableViewCell.appearance().selectionStyle = .none
        UITableView.appearance().allowsSelection = false
        #endif
    }
    
  • 仅针对Ventura系统隐藏:如果只想在Ventura及以上版本移除,加上系统版本判断:
    init() {
        #if targetEnvironment(macCatalyst)
        if ProcessInfo.processInfo.isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 13, minorVersion: 0, patchVersion: 0)) {
            UINavigationBar.appearance().isHidden = true
        }
        #endif
        
        #if !targetEnvironment(macCatalyst)
        UITableView.appearance().backgroundColor = UIColor(named: "White")
        UITableViewCell.appearance().selectionStyle = .none
        UITableView.appearance().allowsSelection = false
        #endif
    }
    
  • 调整导航视图样式:如果业务允许,可替换columns样式为stack,但这会改变整体布局,需按需选择:
    .navigationViewStyle(.stack) // 替换原有的.columns
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:50:39