我的代码非常简单.

struct ContentView: View {
    var body: some View {
        ZStack {
            ZStack {
                
            }.frame(maxWidth: .infinity, maxHeight: .infinity).background(Color.red)
            
        }.frame(width: 320, height: 400)
    }
}

此代码正常如下:

enter image description here

如果我将内部ZStack更改为List,如下所示:

struct ContentView: View {
    var body: some View {
        ZStack {
            List {
                ForEach(1..<10) { index in
                    Text("Index-\(index)")
                }
            }.frame(maxWidth: .infinity, maxHeight: 100)
        }.frame(width: 320, height: 400)
    }
}

The top triangle is gone and the popover's location is strange. enter image description here

我想知道如何解决这个问题.

一些其他代码:

@main
struct VeryToDoApp: App {
    
    @NSApplicationDelegateAdaptor var delegate: AppDelegate
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class AppDelegate: NSObject, NSApplicationDelegate {
    var statusItem: NSStatusItem!
    var popover: NSPopover!
    
    override init() {
        
    }
    
    func applicationDidFinishLaunching(_ notification: Notification) {
        setupStatusBarItem()
        setupPopover()
    }
    
    func setupStatusBarItem() {
        statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)
        
        if let button = statusItem.button {
            let imageSize = NSSize(width: 22, height: 22)
            button.image = NSImage(named: "AppIcon")
            button.image?.size = imageSize
            button.action = #selector(togglePopover(_:))
        }
    }
    
    func setupPopover() {
        popover = NSPopover()
        popover.behavior = .transient
        popover.contentViewController = PopoverViewController().makeNSViewController()
    }
    
    @objc func togglePopover(_ sender: AnyObject?) {
        if popover.isShown {
            closePopover(sender)
        } else {
            showPopover(sender)
        }
    }
    
    func showPopover(_ sender: AnyObject?) {
        if let button = statusItem.button {
            popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
        }
    }
    
    func closePopover(_ sender: AnyObject?) {
        popover.performClose(sender)
    }
    
}

struct PopoverViewController: NSViewControllerRepresentable {
    func makeNSViewController(context: Context) -> NSViewController {
        return makeNSViewController()
    }
    
    func makeNSViewController() -> NSViewController {
        let viewController = NSViewController()
        viewController.view = NSHostingView(rootView: ContentView())
        return viewController
    }
    
    func updateNSViewController(_ nsViewController: NSViewController, context: Context) {
        // Update code if needed
    }
}

推荐答案

使用SwiftUI的原生MenuBarExtra.menuBarExtraStyle(.window)

import SwiftUI

@main
struct HelloMenuBarApp: App {
    private let animals = ["Lions", "Tigers", "Bears"]
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        MenuBarExtra {
            List {
                ForEach(animals, id: \.self) { animal in
                   Text(animal)
                }
            }
            .frame(width: 320, height: 400)
        } label: {
            Image(systemName: "tray.2.fill")
        }
        .menuBarExtraStyle(.window)
    }
}

Swift相关问答推荐

数据不会被ARC删除在swift'

如何在realityKit中反转USDZ动画

SwiftUI:使视图B与视图A具有相同宽度的视图A更改比率?

NSWindow中以编程方式创建的TextField快捷方式与SwiftUI

background Task(.backgroundTask)不适用于MySQL

如何将多个完成处理程序转换为异步?

SwiftUI .task 视图修改器:运行在哪个线程中?

UIBezierPath() 和 DragGesture:连接点创建角而不是曲线

如何在 swiftui 中设置给定字符串类型日期的日期倒计时?

使用 swift 的 Firebase 身份验证

Swift Random Float Fatal Error:在无限范围内没有均匀分布

swiftui中服务端图片如何设计view并赋予rotationEffect?

从文字创建数组时的 Swift 宏

您是否必须手动指定您的 DispatchQueue 是串行的?

Swift - 给定一个像 30 的 Int 如何将范围数乘以 7?

如何在 SwiftUI 的 fileImporter 中为 allowedContentTypes 设置 xcodeproj 类型?

如何在 Xcode 中的 UITests 下以通用方式访问后退栏按钮项?

Type 应该采用什么协议来让泛型函数将任何数字类型作为 Swift 中的参数?

由于编译器中的内部保护级别,无法访问框架 init 中的公共 struct

swift - 我可以从我的自定义初始化方法中调用 struct 默认成员初始化吗?