#swift #xcode #swiftui
#swift #xcode #swiftui
Вопрос:
Я пытаюсь установить цвет текста в средстве выбора, но на самом деле это ничего не меняет. Ниже приведен мой код:
Picker("Theme Color", selection: $themeColor) {
ForEach(0..<themeColors.count) { _ in
Text("Color").foregroundColor(.blue)
}
}.pickerStyle(SegmentedPickerStyle())
Это просто невозможно в SwiftUI?
Ответ №1:
Ну … ничего прямого, но вы можете поиграть со следующим подходом… что позволяет получить некоторые интересные эффекты (возможно, кто-то может подойти)
Демо подготовлено и протестировано с Xcode 12 / iOS 14
Picker("Theme Color", selection: $themeColor) {
ForEach(0..<4) { _ in
Text("Color")
}
}.pickerStyle(SegmentedPickerStyle())
.colorMultiply(.white).colorInvert()
и даже
Picker("Theme Color", selection: $themeColor) {
ForEach(0..<4) { _ in
Text("Color")
}
}.pickerStyle(SegmentedPickerStyle())
.colorMultiply(.white).colorInvert()
.colorMultiply(.orange).colorInvert()
Ответ №2:
Мне удалось change
изменить цвет переднего плана средства выбора, но это было далеко не хорошо, поскольку выбранный элемент не будет читаемым. Учитывая мой неудачный опыт работы с сегментированным средством выбора в iOS 13 и тот факт, что в то время я не мог изменить размер средства выбора, я думаю, что средства выбора по-прежнему не настраиваются, и, как и я, вам нужно будет написать свой собственный средство выбора, если вы хотите более настраиваемый.
Ответ №3:
В SwiftUI 2 по- Picker
прежнему поддерживается UISegmentedControl
.
Это означает, что вы можете использовать UISegmentedControl.appearance()
модификаторы:
UISegmentedControl.appearance().selectedSegmentTintColor = .systemOrange
UISegmentedControl.appearance().backgroundColor = .systemRed
Комментарии:
1. Это приближает меня, но есть ли способ изменить каждый из них по отдельности?
2. @JoeScotto Вы можете установить цвет фона индивидуально, но я не знаю решения для выбранного элемента (вы всегда можете попробовать решение Аспери).
3. Как бы вы это сделали для каждого элемента? Выбранному мне просто нужна граница или что-то в этом роде.
4. @JoeScotto Вы можете сделать
UISegmentedControl.appearance().backgroundColor = .clear
, а затем просто применитьbackground(Color.red)
модификатор к вашему средству выбора. Но я не знаю, как получить доступ к внешнему виду выбранного сегмента в SwiftUI.5. @JoeScotto Вы нашли решение для изменения цветов строк по отдельности?
Ответ №4:
Я получил желаемые результаты, используя «setTitleTextAttributes»
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .normal)
Я добавил эту строку в метод init() родительского представления.
public init() {
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor(colorManager.p3)], for: .normal)
}
Обратите внимание, что вам нужен UIColor, а не цвет SwiftUI