SwiftUI中Menu内Picker对应的Section标题不显示如何解决?
在Menu组件中直接将Picker放入Section时,Section标题会因Picker的默认渲染逻辑被忽略,导致无法显示。可以通过以下两种方法解决:
方法一:使用iOS 16+原生菜单Section标题(推荐)
利用.menuSectionHeader()修饰符直接添加Section标题,同时将Picker的label设为EmptyView(),让选项直接展示在Menu中:
enum Filter { case upcoming, past } struct ContentView: View { @State var filter = Filter.upcoming var body: some View { Menu("Example") { Section("Foo") { Text("Bar") } // 添加Section标题 Text("Filter") .menuSectionHeader() Picker(selection: $filter, label: EmptyView()) { Text("Upcoming events").tag(Filter.upcoming) Text("Past events").tag(Filter.past) } Section("Order") { Button("Ascending") {} Button("Descending") {} } } .menuOrder(.fixed) } }
方法二:兼容iOS 15及以下版本
手动添加具有Section标题样式的文本,配合Divider实现分隔效果:
enum Filter { case upcoming, past } struct ContentView: View { @State var filter = Filter.upcoming var body: some View { Menu("Example") { Section("Foo") { Text("Bar") } // 手动添加Section标题 Text("Filter") .font(.caption) .foregroundColor(.secondary) .padding(.horizontal) Picker(selection: $filter, label: EmptyView()) { Text("Upcoming events").tag(Filter.upcoming) Text("Past events").tag(Filter.past) } Divider() Section("Order") { Button("Ascending") {} Button("Descending") {} } } .menuOrder(.fixed) } }
两种方法都能让"Filter"标题正常显示在Picker选项上方,其中方法一利用iOS 16+的原生API,样式更贴合系统默认的Menu Section标题效果。
内容的提问来源于stack exchange,提问作者Slevin
相关产品推荐
相关产品推荐

