#ios #swift #swiftui #tvos
Вопрос:
Я работаю над приложением tvOS (v15) в SwiftUI, но этот вопрос может также относиться к iOS, watchOS и macOS.
При создании настраиваемого фокусируемого вида Text
я хочу, чтобы его фон по умолчанию оставался абсолютно прозрачным, а при фокусировке воспользуйтесь возможностью SwiftUI 3.0 назначать полупрозрачный материал на фоне. Код работает нормально, но я, похоже, не могу найти способ сделать Material
его прозрачным.
Рассмотрим этот пример:
//I want to able to set this to transparent by default instead of setting a ".regular" material (which is opaque)
@State private var plotBackground: Material = .regular
@FocusState private var elementFocused: Bool
[...]
Text("Lorem Ipsum ...")
.padding()
.focusable()
.focused($elementFocused)
.onChange(of: elementFocused) { isFocused in
withAnimation {
self.plotBackground = isFocused ? .ultraThin : .regular
}
}
.background(plotBackground, in: RoundedRectangle(cornerRadius: 8))
Есть какие-нибудь предложения?
Комментарии:
1. Я предполагаю, что прозрачный материал эквивалентен отсутствию материала, поэтому попробуйте использовать необязательный:
@State private var plotBackground: Material? = nil
и разберитесь с необязательным/разворачиванием.