在SwiftUI中是否可以像在UIKit中使用UISlider一样更改Slider的滑块?使用UISlider,您只需要执行以下操作:
self.setThumbImage(UIImage(named: "Play_black"), for: .normal)
你可以使用SwiftUI-Introspect实现这一点。
基本上,你只需要从SwiftUI的Slider
中访问底层的UISlider
,然后在那里进行设置。这比创建自定义滑块或制作可代表的要容易得多。
代码:
struct ContentView: View {
@State private var value: Double = 0
var body: some View {
Slider(value: $value)
.introspectSlider { slider in
slider.setThumbImage(UIImage(named: "Play_black"), for: .normal)
}
}
}
结果(临时图像):
appearance
来实现此功能。struct CustomSlider : View {
@State private var value : Double = 0
init() {
let thumbImage = UIImage(systemName: "circle.fill")
UISlider.appearance().setThumbImage(thumbImage, for: .normal)
}
var body: some View {
Slider(value: $value)
}
}
onAppear
的解决方案有效,但这个不行。 - undefinedSlider(value: $value)
.onAppear {
let thumbImage = UIImage(systemName: "circle.fill")
UISlider.appearance().setThumbImage(thumbImage, for: .normal)
}
var body: some View {
VStack {
Text("\(value1)")
Slider(value: $value1)
Text("\(value2)")
Slider(value: $value2)
}
.onAppear {
let thumbImage = UIImage(systemName: "circle.fill")
UISlider.appearance().setThumbImage(thumbImage, for: .normal)
}
}
Slider
视图。 - undefinedonAppear
,所有滑块都只有一个thumpImage。 - undefinedsoundflix
;我现在已经修改了我的答案,更清晰了。这个.onAppear
肯定会污染整个视图层次结构(就像你说的子/父/祖父等);但是,如果你的视图层次结构还没有被这个.onAppear
污染,你可以通过创建不同的滑块样式在其中引入不同的污染。我希望能找到一个本地解决方案,不再有这种污染行为... - undefined