正如我们在代码首选项中看到的那样,Column被设置为NavigationSplitViewColumn.siidear,但当我在iPhone 15 PRO预览版中打开这个应用程序时,会显示NavigationSplitViewColumn.Detail,然后用户必须单击顶部的Back按钮才能进入侧边栏视图

enter image description here

struct ContentView: View {
    @State private var selectedSidebarItem: String? = ""
    @State private var isExpanded: Bool = true
    @State private var preferredColumn = NavigationSplitViewColumn.sidebar


    private var toolbarTitle: String {
        switch selectedSidebarItem {
            case "UrlToSummaryView":
                return "URL to Summary"
            case "GenerateShortStoryView":
                return "Generate a Short Story"
            case "YoutubeVideoToSummaryView":
                return "Youtube Video to Summary"
            case "GenerateIdeasView":
                return "Generate Ideas"
            default:
                return ""
        }
    }
    
    var body: some View {
        NavigationSplitView(preferredCompactColumn: $preferredColumn) {
            List(selection: $selectedSidebarItem) {
                DisclosureGroup("Tasks", isExpanded: $isExpanded) {
                    NavigationLink(value: "UrlToSummaryView") {
                        HStack {
                            Image(systemName: "link")
                            Text("URL to summary")
                        }
                    }
                    NavigationLink(value: "GenerateShortStoryView") {
                        HStack {
                            Image(systemName: "chart.bar.doc.horizontal")
                            Text("Generate a short story")
                        }
                    }
                    NavigationLink(value: "YoutubeVideoToSummaryView") {
                        HStack {
                            Image(systemName: "video")
                            Text("Youtube video to summary")
                        }
                    }
                    NavigationLink(value: "GenerateIdeasView") {
                        HStack {
                            Image(systemName: "brain.filled.head.profile")
                            Text("Generate ideas")
                        }
                    }
                }
            }
            .navigationTitle("Butler")
        } content: {
            Text("Hello")
        } detail: {
            if let selectedSidebarItem {
                switch selectedSidebarItem {
                    case "UrlToSummaryView":
                        ToolbarWrapper(title: "URL to summary") {
                            UrlToSummaryView()
                        }
                    case "GenerateShortStoryView":
                        ToolbarWrapper(title: "Generate a Short Story") {
                            GenerateShortStoryView()
                        }
                    case "YoutubeVideoToSummaryView":
                        ToolbarWrapper(title: "Youtube Video to Summary") {
                            YoutubeVideoToSummaryView()
                        }
                    case "GenerateIdeasView":
                        ToolbarWrapper(title: "Generate Ideas") {
                            GenerateIdeasView()
                        }
                    default:
                        Button("Sidebar") {
                            preferredColumn = NavigationSplitViewColumn.content
                        }
                }
            } else {
                Text("")
            }
        }
        .navigationSplitViewStyle(.balanced)
    }
}

我希望在iPhone中默认可以看到侧边栏视图.

推荐答案

正如您可能知道的,NavigationSplitViewList协作,根据列表 Select 导航到不同的列.

我怀疑这里正在发生的事情,就是这条线

@State private var selectedSidebarItem: String? = ""

使NavigationSplitView认为List中的某些内容最初被选中,并因此显示Content列(带有"Hello"的列不是Detail列!),忽略您设置的首选项.

如果你一开始就把selectedSidebarItem设置为nil,这就意味着"列表中没有 Select 任何东西",所以NavigationSplitView会尊重你的偏好.

@State private var selectedSidebarItem: String? = nil

Ios相关问答推荐

我想在expo 中使用useSafeAreaInsets来获取paddingbottom,但我得到了一个错误

通过在SWIFT中不起作用的泛型传递协议一致性类型

与iPadOS中带有扣件的模式相似的组件是什么?

自定义油漆圆角三角形

设置托管在DigitalOcean上的iOS通用链接

如何使用 SwiftData 从列表中删除子项目?

Flutter应用内购买无法恢复购买

NumberFormatter 无法使用 Xcode 15.0 beta 正确识别 iOS 17 beta 中的 Locale 货币设置

在 Swift 中使用 UITesting 捕获屏幕录像

在使用 Github Actions 时,我面临权限被拒绝错误

在 UICollectionView 上动态设置布局导致莫名其妙的 contentOffset 变化

setNeedsLayout 和 setNeedsDisplay

如何忽略touch 事件并将它们传递给另一个子视图的 UIControl 对象?

在 iOS 上存储身份验证令牌 - NSUserDefaults 与 keys 串?

呈现和关闭模态视图控制器

Xcode 4.2 如何将一个项目包含到另一个项目中?

Storyboard Segue 从视图控制器到自身

使用 Swift 在一个 ViewController 中强制横向模式

在 iOS 7 中更改返回按钮会禁用滑动导航返回

更改标签栏项目图像和文本 colored颜色 iOS