@Environment(\.colorScheme) var colorScheme
var body: some View {
let hackySliderBGColor: Color = colorScheme == .dark ? Color(.secondarySystemBackground) : Color(.systemBackground)
let hackySliderAccentColor: Color = colorScheme == .dark ? Color(.label) : Color(.systemGray2)
let hackySliderBlendMode: BlendMode = colorScheme == .dark ? .softLight : .multiply
...
ZStack {
Rectangle()
.foregroundColor(hackySliderBGColor)
// This second Rect prevents a white sliver if slider is at max value.
.overlay(Rectangle()
.foregroundColor(hackySliderBGColor)
.offset(x: 5)
)
Slider(value: $pointsToScoreLimit,
in: themin...themax, step: 5)
.accentColor(hackySliderAccentColor)
.blendMode(hackySliderBlendMode)
}
6条答案
按热度按时间eni9jsuy1#
正如在其他回答中所指出的,您在SwiftUI中自定义
Slider
的能力有限。您可以更改.accentColor(.red)
,但这只会更改minimumTrackTintColor。Slider
与.accentColor(.red)
的示例另外,你不能改变thumbTintColor这样的其他东西,如果你想要更多的定制而不仅仅是
minimumTrackTintColor
,你别无选择,只能像rob mayoff所说的那样在SwiftUI
中使用UISlider
。下面是一些关于如何在SwiftUI中使用
UISlider
的代码然后,您可以在
ContentView
中使用此滑块,如下所示:示例:
Link to full project
q1qsirdb2#
从苹果2021年的平台开始,你可以使用
tint
修改器来改变滑块旋钮左侧轨道的颜色,除此之外,SwiftUI的Slider
不允许你自定义它的外观。如果你需要更多的定制,那么现在你唯一的选择就是创建一个
UISlider
并将其 Package 在一个UIViewRepresentable
中。学习the “Interfacing with UIKit” tutorial并观看WWDC 2019 Session 231: Integrating SwiftUI以学习如何使用UIViewRepresentable
。Slider
文档以前提到过一个名为SliderStyle
的类型,但是没有SliderStyle
的文档,而且从Xcode 11 beta 4开始,SwiftUI框架的公共接口中实际上没有定义该类型。它可能会出现在以后的版本中。也可能我们需要等待将来的版本(13之后)版本的SwiftUI的此能力。如果
SliderStyle
真的出现了,它可能允许你定制Slider
的外观,就像ButtonStyle
允许你定制Button
的外观一样--通过承担绘制它的全部责任。所以如果你想抢先一步,你可能需要在网上寻找ButtonStyle
的教程。但是
SliderStyle
最终可能更像TextFieldStyle
,苹果提供了少量的TextFieldStyle
供你选择,但是你不能定义自己的。6ovsh4lw3#
这将在iOS和Mac Catalyst上工作。查看可定制滑块示例here
qoefvg9y4#
如果明亮的白色滑块手柄在暗模式设计上有光栅,你可以使用.label color和.softLight来告诉它慢一点。除非你能弄清楚混合模式和色调旋转,否则它只在灰度下看起来不错。
最好看的结果应该是用.blendMode(.sourceAtop)覆盖的形状......但遗憾的是,这会阻碍交互。
示例:
hpcdzsge5#
所以我尝试使用
.accentColor(.red)
,但没有成功,所以我注意到对于较新的版本,必须使用.tint(.red)
才能使更改可见。希望这个有用。
6kkfgxo06#
您可以使用
ZStack
更改最大轨迹颜色,如下所示enter image description here