Прозрачный материал в Swiftui

#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 и разберитесь с необязательным/разворачиванием.