SwiftUI & Mac Catalyst:导航栏右侧按钮添加及导航栏移除问题
Mac Catalyst应用导航栏问题解决指南
一、解决导航栏右侧按钮不显示的问题
- 核心原因:
navigationBarItems在iOS 16(对应Mac Catalyst Ventura)及以上版本已被官方废弃,改用toolbar才是当前标准写法;另外你代码里的导航栏显示隐藏逻辑也可能和按钮显示冲突。 - 修复步骤:
- 替换
navigationBarItems为toolbar:在HomeView中修改代码如下#if targetEnvironment(macCatalyst) .toolbar { ToolbarItem(placement: .navigationBarTrailing) { NavButtons } } #endif - 修正导航栏显示逻辑:确保在Mac Catalyst环境下导航栏处于显示状态,避免按钮被隐藏。可以调整HomeView里的
navigationBarHidden代码:.navigationBarHidden(isMac ? false : true) // 若需针对Ventura+单独适配,可改为: .navigationBarHidden(!(isMac && ProcessInfo.processInfo.isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 13, minorVersion: 0, patchVersion: 0))) ? true : false) - 检查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
相关产品推荐
相关产品推荐

