Код ниже — это мое текущее колесо выбора. Мой вопрос: как я могу добавить значки (флаги) и выровнять их точно так же, как это?
@State private var selectedLanguage = "English"
let languages = ["English", "Italiano", "Francais", "Deutsche"]
Picker("Select Language", selection: $selectedLanguage) {
ForEach(languages, id: \.self) { language in
Text(language).tag(language)
}
}
.pickerStyle(WheelPickerStyle())
.frame(width: 300, height: 150)





Поставьте .frame(maxWidth: .infinity) на каждый текст, чтобы он занимал всю ширину колеса. Затем поместите изображение в качестве начального наложения поверх текста.
Вот пример, где изображения представляют собой цифры от 0 до 9, обведенные кружком, а текст — буква «x», повторенная n раз.
@State var x = 0
var body: some View {
Picker("Foo", selection: $x) {
ForEach(0..<10) { i in
Text(String(repeating: "x", count: i + 1))
.frame(maxWidth: .infinity)
.overlay(alignment: .leading) {
Image(systemName: "0\(i).circle")
}
}
}
.pickerStyle(.wheel)
.frame(width: 300)
}
Выход:
Попробуйте этот подход, используя специальные struct Language, HStack
и при условии, что у вас есть соответствующие
отметьте изображения в своем Assets.xcassets. У меня хорошо работает.
struct Language: Identifiable {
let id = UUID()
var name: String
var flag: String
}
struct ContentView: View {
@State private var selectedLanguage = "English"
let languages = [Language(name: "English", flag: "gb"),
Language(name: "Italiano", flag: "it"),
Language(name: "Français", flag: "fr"),
Language(name: "Deutsche", flag: "de")]
var body: some View {
Picker("Select Language", selection: $selectedLanguage) {
ForEach(languages) { language in
HStack {
Image(language.flag).resizable().frame(width: 35, height: 25)
Text(language.name)
Spacer()
}.tag(language.name)
}
}
.pickerStyle(.wheel)
.frame(width: 300, height: 150)
}
}
Обратите внимание: вы можете поставить Spacer() перед Text(language.name), если хотите, или и до, и после. В этом случае это дает вам следующее:
Вы можете найти все флаги здесь, на github: github.com/hampusborgos/country-flags и hampusborgos.github.io/country-flags Загрузите, разархивируйте, а затем добавьте/скопируйте их на свой Assets.xcassets Если мой ответ помог вы можете принять его, отметив галочку рядом с ним, она станет зеленой.
Спасибо. Это отличный ответ, но я принял другой, потому что хочу, чтобы текст находился в центре экрана, независимо от положения флага.
Отличный ответ. Могу я спросить, откуда у вас изображения флага? Они выглядят хорошо.