SwiftUI: Могу ли я изменить только цвет фона «выключенной» дорожки собственного переключателя (переключателя), не теряя IOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI: Могу ли я изменить только цвет фона «выключенной» дорожки собственного переключателя (переключателя), не теряя

Сообщение Anonymous »

Я использую собственный Toggle SwiftUI со стилем переключения. Я хочу изменить только цвет фона выключенной (не выбранной) дорожки, сохранив при этом родной внешний вид и поведение переключателя iOS.
Я пытался создать собственный ToggleStyle для управления цветом дорожки, но это означает, что я больше не использую собственный рендеринг переключателя (внешний вид и анимация не полностью соответствуют системному переключателю).
Вот упрощенная версия того, что я есть:

Код: Выделить всё

import SwiftUI

public struct CustomSwitch: View {
@Binding private var isOn: Bool
private let content: Content

public init(
isOn: Binding,
@ViewBuilder content: () -> Content
) {
self._isOn = isOn
self.content = content()
}

public var body: some View {
Toggle(isOn: $isOn) { content }
.toggleStyle(CustomSwitchToggleStyle())
}
}

private struct CustomSwitchToggleStyle: ToggleStyle {
func makeBody(configuration: Configuration) -> some View {
HStack {
configuration.label
Spacer()
ZStack {
Capsule()
// want custom OFF color
.fill(configuration.isOn ? Color.green : Color.gray)
.frame(width: 51, height: 31)

Circle()
.fill(Color.white)
.frame(width: 27, height: 27)
.shadow(radius: 2)
.offset(x: configuration.isOn ? 10 : -10)
}
.onTapGesture {
withAnimation(.easeInOut(duration: 0.2)) {
configuration.isOn.toggle()
}
}
}
}
}
Проблема: эта специальная реализация не сохраняет внешний вид родного переключателя: он близок, но все же отличается от системного компонента.
Я также пробовал использовать собственный переключатель:

Код: Выделить всё

Toggle("Example", isOn: $isOn)
.toggleStyle(.switch)
.tint(.green)
Вопрос
Можно ли в SwiftUI изменить только неправильный (не выбранный) цвет фона собственного переключателя в стиле переключателя без переопределения/замены собственного внешнего вида?
Если нет, то какой подход рекомендуется достичь, оставаясь при этом как можно ближе к исходному (без оболочки UIKit с UISwitch)?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ive-toggle
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»