Picker - ShenYj/ShenYj.github.io GitHub Wiki
在熟悉SwiftUI 控件的时候发现 Picker的 pickerStyle
设置不同展示样式时有个厉害的地方,除了配置不同样式外还能完成不同样式与之的交互效果
- 示例代码(关键部分: 系统语言设置)
import SwiftUI
struct ContentView: View {
@State private var isBellSlash: Bool = false
@State private var isDarkMode: Bool = false
@State private var selectedColor: Color = .white
@State private var selectedLanguage: String = "简体中文"
@State private var languages = ["简体中文", "繁体中文", "英文"]
var body: some View {
NavigationStack {
Form {
/// 常规设置
Section {
notificationToggleView
darkModeToggleView
} header: {
Text("常规设置")
}
.padding(.vertical, 3)
/// 个性化
Section {
colorPickerView
languagePickerView
}
.padding(.vertical, 3)
/// 关于我们
Section {
}
.padding(.vertical, 3)
}
.navigationTitle("应用设置")
.navigationBarTitleDisplayMode(.inline)
}
}
/// 消息通知
private var notificationToggleView: some View {
Toggle(isOn: $isBellSlash) {
HStack {
Image(systemName: "bell")
.font(.system(size: 20))
Text("消息通知")
}
}
}
/// 暗黑模式
private var darkModeToggleView: some View {
Toggle(isOn: $isDarkMode) {
HStack {
Image(systemName: "moon.stars")
.font(.system(size: 20))
Text("深色模式")
}
}
.preferredColorScheme(isDarkMode ? .dark : .light)
}
/// 主题颜色
private var colorPickerView: some View {
ColorPicker(selection: $selectedColor) {
HStack {
Image(systemName: "paintbrush")
.font(.system(size: 20))
Text("主题颜色")
}
}
}
/// 系统语言
private var languagePickerView: some View {
Picker(selection: $selectedLanguage) {
ForEach(languages, id: \.self) { language in
Text(language)
}
} label: {
HStack {
Image(systemName: "waveform")
.font(.system(size: 20))
Text("系统语言")
}
}
.pickerStyle(.automatic)
}
}
#Preview {
ContentView()
}
默认样式
每个选项都与其他视图在同一容器中行内显示
对比默认样式十分相似,只有选中项展示时的颜色区别
一个由导航链接表示的拣选样式,通过推送列表样式拣选视图来展示选项。
这项就有意思了,做了个子页面跳转,选择完自动返回
一种以紧凑元素行展示选项的拾取样式,类似于segment的展示样式
注意按照我当前的图片+文字组合展示表单被这个样式所替代
这是一个macOS下的样式,暂时跳过
跟 palette 几乎看不出区别
类似于原来 UIKit 中的 UIPickerView 一样的滚动效果