如何隐藏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 }
解决方法
要移除这个展开三角,只需要做两处修改:
- 修改状态栏项的尺寸类型
把setupStatusBarItem里的variableLength换成squareLength,避免系统认为需要预留展开空间:
private func setupStatusBarItem() { statusBarItem = NSStatusBar.system.statusItem(withLength: CGFloat(NSStatusItem.squareLength)) configureStatusBarButton() }
- 隐藏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
相关产品推荐
相关产品推荐

