如何在SwiftUI分段选择器中更改选定的分段颜色

时间:2019-08-31 06:35:02

标签: swift swiftui

我想在SwiftUI分段选择器中设置选定的分段颜色,并将文本颜色更改为白色。

我已经尝试过同时使用选择器视图的修饰符和修改外观代理的色调颜色。不幸的是,它们似乎都不起作用。


import SwiftUI

struct PickerView: View {

    @State var pickerSelection = 0

    init() {
        UISegmentedControl.appearance().tintColor = UIColor.blue
    }

    var body: some View {
        Picker(selection: $pickerSelection, label: Text("")) {
            Text("Active").tag(0).foregroundColor(Color.white)
            Text("Completed").tag(1)
        }.pickerStyle(SegmentedPickerStyle()).foregroundColor(Color.orange)
    }
}

在SwiftUI中有什么方法可以做到这一点,还是应该通过UIViewControllerRepresentable使用UISegmentedControl?

3 个答案:

答案 0 :(得分:8)

selectedSegmentTintColor从beta 3开始可用,用于更改所选段的颜色。

要更改textColor,应将setTitleTextAttributes用于.selected状态和.normal状态(未选中)。

因此它将是:

init() {
    UISegmentedControl.appearance().selectedSegmentTintColor = .blue
    UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
    UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.blue], for: .normal)
}

Segmented Controll

答案 1 :(得分:-1)

这是我在 SwiftUI 中工作的解决方案:

init(){

    UISegmentedControl.appearance().selectedSegmentTintColor = .green
    UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.black], for: .selected)

    }

答案 2 :(得分:-1)

这个回答对我有帮助,但我想补充一些东西。我使用的颜色是视图的参数,因此将这些方法放在 init 中不允许我访问颜色。

或者,您可以直接在 Segmented Picker 上使用 onAppear 方法,就像这样。

import SwiftUI

struct PickerView: View {
    var color: UIColor   
    @State var pickerSelection = 0

    var body: some View {
        Picker(selection: $pickerSelection, label: Text("")) {
            Text("Active").tag(0).foregroundColor(Color.white)
            Text("Completed").tag(1)
        }.pickerStyle(SegmentedPickerStyle()).foregroundColor(Color.orange)
        .onAppear {
            UISegmentedControl.appearance().tintColor = color
        }
    }
}