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

如何隐藏macOS菜单栏应用中的Disclosure Indicator

移除macOS SwiftUI菜单栏Popover旁的展开三角

我开发了一个macOS SwiftUI菜单栏应用,正尝试移除弹出窗口旁的展开三角(disclosure triangle),以下是popover相关代码:

![菜单栏Popover旁的展开三角截图]

private func setupStatusBarItem() {
    statusBarItem = NSStatusBar.system.statusItem(withLength: CGFloat(NSStatusItem.variableLength))
    configureStatusBarButton()
}

private func configureStatusBarButton() {
    if let button = statusBarItem.button {
        button.image = NSImage(named: "icon")
        button.action = #selector(togglePopover(_:))
    }
}

@objc func togglePopover(_ sender: AnyObject?) {
    if let button = statusBarItem.button {
        if popover.isShown {
            popover.performClose(sender)
        } else {
            popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
        }
    }
}

private func setupPopover() {
    let contentView = ContentView(viewModel: viewModel, appDelegate: self)
    popover = createPopover(with: contentView)
}

private func createPopover(with contentView: ContentView) -> NSPopover {
    let popover = NSPopover()
    popover.contentSize = NSSize(width: 300, height: 250)
    popover.behavior = .transient
    popover.contentViewController = NSHostingController(rootView: contentView)
    return popover
}

解决方法

要移除这个展开三角,只需要做两处修改:

  1. 修改状态栏项的尺寸类型
    把setupStatusBarItem里的variableLength换成squareLength,避免系统认为需要预留展开空间:
private func setupStatusBarItem() {
    statusBarItem = NSStatusBar.system.statusItem(withLength: CGFloat(NSStatusItem.squareLength))
    configureStatusBarButton()
}
  1. 隐藏Popover的默认按钮
    在createPopover方法中添加showsCloseButton = false,直接关闭Popover的展开三角/关闭按钮:
private func createPopover(with contentView: ContentView) -> NSPopover {
    let popover = NSPopover()
    popover.contentSize = NSSize(width: 300, height: 250)
    popover.behavior = .transient
    popover.showsCloseButton = false // 移除展开三角的关键设置
    popover.contentViewController = NSHostingController(rootView: contentView)
    return popover
}

这两处修改结合起来,就能彻底移除菜单栏Popover旁边的展开三角了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:23:22