NavigationSplitView 的侧边栏切换按钮在显示侧边栏时暂时消失

NavigationSplitView's sidebarToggle button temporarily disappear when showing sidebar

提问人:edu 提问时间:11/12/2023 最后编辑:edu 更新时间:11/12/2023 访问量:21

问:

我有一个简单的 macOS,面向 macOS 13.0,它显示一个带有侧边栏和详细信息的 NavigationSplitView。 侧边栏切换按钮按预期工作,除非侧边栏被隐藏并且我按下它以显示侧边栏。它会暂时消失,并在视图中导致一些故障。 这是我到目前为止编写的代码。

通过GIPHY会发生什么

import SwiftUI

@main
struct SomeApp: App
{
    var body: some Scene
    {
        WindowGroup 
        {
            MainScreen()
                .frame(minHeight: 450)
                .frame(width: 720)
                .presentedWindowToolbarStyle(.unified)
                .navigationTitle("SomeApp")
        }
        .windowResizability(.contentSize)
    }
}

enum MenuItem: Identifiable, Hashable
{
    case readme
    case about
    
    var id: String
    {
        title
    }
    
    var title: String
    {
        switch self
        {
            case .readme: "Readme"
            case .about: "About"
        }
    }
    
    var symbolName: String
    {
        switch self
        {
            case .readme: "newspaper.circle.fill"
            case .about: "info.circle.fill"
        }
    }
}

struct MainScreen: View
{
    @State var menuItems: [MenuItem]
    @State var selectedMenuItem: MenuItem
    
    init()
    {
        selectedMenuItem = .readme
        menuItems = [
            .readme,
            .about
        ]
    }
  
    var body: some View
    {
        NavigationSplitView
        {
            List(
                menuItems,
                selection: $selectedMenuItem
            ) { item in
                NavigationLink(
                    destination: {
                        switch selectedMenuItem 
                        {
                            case .readme:
                                Text("Readme")
                            
                            case .about:
                                Text("About")
                        }
                    },
                    label: {
                        HStack
                        {
                            Image(systemName: item.symbolName)
                                .resizable()
                                .frame(
                                    width: 24,
                                    height: 24
                                )
                                .foregroundStyle(
                                    .white,
                                    fillStyle(for: item)
                                )
                            
                            Text(item.title)
                        }
                    }
                )
            }
            .frame(width: 200)
        }
        detail:
        {
            Image(systemName: "command.square.fill")
                .resizable()
                .frame(width: 128, height: 128)
        }
    }
    
    private func fillStyle(for menuItem: MenuItem) -> Color
    {
        switch menuItem
        {
            case .readme: .green
            case .about: .blue
        }
    }
}

我试过切换值,值,以不同的方式组装,但无济于事。我有 SwiftUI 的经验,但不是 s 或 s,我以不同的方式使用导航,但我想坚持使用这个解决方案。 不幸的是,我无法确切地弄清楚是什么导致了这种行为。columnVisibilitynavigationSplitViewStyleListListNavigationLink

Swift macOS SwiftUI 导航拆分视图

评论


答: 暂无答案