#swiftui #slider
#swiftui #слайдер
Вопрос:
При каких обстоятельствах SwiftUI
Slider
видна метка слайдера? Slider
инициалы могут принимать аргументы метки, но я не понимаю, для чего эта метка?
struct ContentView: View {
@State private var slVal: CGFloat = -20
var body: some View {
Slider(value: $slVal, in: -40...40, minimumValueLabel: Text("-40"), maximumValueLabel: Text("40")) {
Text("Invisible text") // This view is not visible
}
.padding()
}
}
При вводе Slider
внутрь Form
ярлык не отображается. Я знаю, что DatePicker
метка отображается или нет в зависимости от .labelsHidden()
модификатора, а также от DatePickerStyle
применения .datePickerStyle()
модификатора.
Есть ли что-то подобное с Slider
?
Ответ №1:
Это давно известная ошибка в SwiftUI.
Здесь возможен обходной путь. Подготовлено с помощью Xcode 12.1 / iOS 14.1 (обратная совместимость с SwiftUI 1.0)
struct ContentView: View {
@State private var slVal: CGFloat = -20
var body: some View {
HStack {
Text("Invisible text")
Slider(value: $slVal, in: -40...40, minimumValueLabel: Text("-40"), maximumValueLabel: Text("40")) {
EmptyView()
}
}
.padding()
}
}
Комментарии:
1. Больше похоже на отмененную вещь, а не на жирную ошибку.
Ответ №2:
Слегка измененная версия обходного пути от @Asperi:
func slider<V, C>(
value: Binding<V>,
in bounds: ClosedRange<V> = 0...1,
label: () -> C,
onEditingChanged: @escaping (Bool) -> Void = { _ in }
) -> some View where V : BinaryFloatingPoint,
V.Stride : BinaryFloatingPoint,
C: View {
HStack {
label()
Slider(
value: value,
in: bounds,
onEditingChanged: onEditingChanged,
label: { EmptyView() }
)
}
}
и использование:
slider(value: $aValue, in: -1...1, label: {
Text("aValue")
})
Комментарии:
1. Это может быть удобно, но я надеюсь, что в какой-то момент в будущем они просто исправят ярлык, а также дадут некоторые стили ползункам, как это делается для
Buttons
,Pickers
,Text Fields
,Toggles
и так далее. Может быть, здесь было бы более уместно инициализировать удобство (а не бесплатную функцию)?
Ответ №3:
Согласно официальной документации, не все стили слайдера отображают ярлыки, но даже в этих случаях SwiftUI использует ярлык для обеспечения доступности (например, VoiceOver).
Комментарии:
1. Интересно, какие стили слайдера отображают ярлыки? Я попытался создать панель инструментов macOS с помощью слайдера, и его метка скрыта.