是否可以像在UIKit中使用UISlider一样在SwiftUI中更改Slider的拇指?使用UISlider,您需要做的就是:self.setThumbImage(UIImage(named: "Play_black"), for: .normal)
self.setThumbImage(UIImage(named: "Play_black"), for: .normal)
vfhzx4xs1#
你可以用SwiftUI-Introspect来实现。你基本上只是从SwiftUI的Slider访问底层的UISlider,然后在那里设置它。这比创建一个自定义滑块或制作一个可表示的要容易得多。代码:
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) } } }
结果(临时图像):
b09cbbtk2#
你可以在SwiftUI中使用UIKit的appearance来实现。范例:
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) } }
qyyhg6bp3#
在iOS 16中也遇到了同样的问题。最简单的自定义方法是使用**.onAppear**修饰符:
Slider(value: $value) .onAppear { let thumbImage = UIImage(systemName: "circle.fill") UISlider.appearance().setThumbImage(thumbImage, for: .normal) }
灵感来源:https://developer.apple.com/forums/thread/719658
更明确地说,如果您有一个包含此.onAppear代码的SampleView,SampleView将 * 污染 * 任何包含SampleView的视图(以及任何上游和下游视图)!),所以如果你想在你的应用中使用多种滑块样式,那么在使用这个解决方案时要非常小心!如果你在理解了它的局限性后仍然想使用这段代码,你可能想把.onAppear移到最外面的视图中,以更准确地反映它的作用,就像这样:
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) } }
3条答案
按热度按时间vfhzx4xs1#
你可以用SwiftUI-Introspect来实现。
你基本上只是从SwiftUI的
Slider
访问底层的UISlider
,然后在那里设置它。这比创建一个自定义滑块或制作一个可表示的要容易得多。代码:
结果(临时图像):
b09cbbtk2#
你可以在SwiftUI中使用UIKit的
appearance
来实现。范例:
qyyhg6bp3#
在iOS 16中也遇到了同样的问题。最简单的自定义方法是使用**.onAppear**修饰符:
灵感来源:https://developer.apple.com/forums/thread/719658
修改:这会改变同一视图中的所有滑块!!!
更明确地说,如果您有一个包含此.onAppear代码的SampleView,SampleView将 * 污染 * 任何包含SampleView的视图(以及任何上游和下游视图)!),所以如果你想在你的应用中使用多种滑块样式,那么在使用这个解决方案时要非常小心!
如果你在理解了它的局限性后仍然想使用这段代码,你可能想把.onAppear移到最外面的视图中,以更准确地反映它的作用,就像这样: