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

SwiftUI:如何在NavigationBar中展示未折叠的Picker菜单?

问题:如何让SwiftUI的Picker默认以未折叠状态展示?

问题详情

我想要展示一个包含多个选项的Picker供用户选择,目前功能已经实现,但Picker是折叠状态的。怎么让它直接以未折叠的形式展示?

示例代码:

struct TestingView: View {

enum Options: String, CaseIterable {
    case option1
    case option2
    case option3
}

@State var selectedOrder: Options = .option1

var body: some View {
    NavigationStack{
        VStack {
            Text("Custom Text")
        }
        .toolbar {
            ToolbarItem(placement: .navigationBarTrailing) {
                Menu {
                    Picker("Order by", selection: $selectedOrder) {
                        ForEach(Options.allCases, id: \.self) {
                            Text($0.rawValue)
                        }
                    }
                    .pickerStyle(.menu)
                } label: {
                    Image(systemName: "arrow.up.arrow.down")
                }
            }
        }
    }
}
}

解决办法

你的代码里把Picker嵌套在了Menu里,还给Picker加了.menu样式,这就是它一直折叠的原因。直接去掉外层的Menu,调整Picker的样式就能实现需求:

方案1:下拉展开式(导航栏常用)

struct TestingView: View {

enum Options: String, CaseIterable {
    case option1
    case option2
    case option3
}

@State var selectedOrder: Options = .option1

var body: some View {
    NavigationStack{
        VStack {
            Text("Custom Text")
        }
        .toolbar {
            ToolbarItem(placement: .navigationBarTrailing) {
                Picker("Order by", selection: $selectedOrder) {
                    ForEach(Options.allCases, id: \.self) {
                        Text($0.rawValue)
                    }
                }
                .pickerStyle(.automatic) // 自动适配导航栏场景,点击后展开选项
                .labelsHidden() // 隐藏默认文字标签
                .overlay(Image(systemName: "arrow.up.arrow.down")) // 保留自定义图标
            }
        }
    }
}
}

方案2:直接显示所有选项(适合选项少的情况)

如果想让所有选项直接展示在导航栏里,用.inline样式:

Picker("Order by", selection: $selectedOrder) {
    ForEach(Options.allCases, id: \.self) {
        Text($0.rawValue)
    }
}
.pickerStyle(.inline)
.labelsHidden()

关键说明

  • 删掉外层的Menu,避免Picker被包裹在折叠容器里
  • .automatic样式会根据所在场景自动调整,在导航栏中会变成可点击展开的下拉选择器
  • .inline样式会直接把所有选项平铺展示,不需要额外点击展开

内容的提问来源于stack exchange,提问作者Ariel Antonio Fundora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:34:55