Наложение перед вкладкой SwiftUI
Я использую SwiftUI
TabView
и я хочу добавить свой
bottomSheet()
модификатор, который принимает представление и отображает его как стандартный
sheet()
модификатор, но не занимая весь экран.
Текущее поведение : мне удалось создать настраиваемый модификатор и показать лист, но лист появляется за нижней панелью вкладок (поскольку он отображается изнутри
NavigationView
).
Ожидаемое поведение: я ищу способ закрыть панель вкладок листом впереди.
Минимальный воспроизводимый пример
Вот пользовательский модификатор, который я создал.
struct BottomSheet<SheetContent: View>: ViewModifier {
let sheetContent: SheetContent
@Binding var isPresented: Bool
init(isPresented: Binding<Bool>, @ViewBuilder content: () -> SheetContent) {
self.sheetContent = content()
_isPresented = isPresented
}
func body(content: Content) -> some View {
ZStack {
content
if isPresented {
ZStack {
Color.black.opacity(0.1)
VStack {
Spacer()
sheetContent
.padding()
.frame(maxWidth: .infinity)
.background(
Rectangle()
.foregroundColor(.white)
)
}
}
}
}
}
}
extension View {
func bottomSheet<SheetContent: View>(isPresented: Binding<Bool>, @ViewBuilder content: @escaping () -> SheetContent) -> some View {
self.modifier(BottomSheet(isPresented: isPresented, content: content))
}
}
Вот как я это использую.
struct ScheduleTab: View {
@State private var showSheet = false
var body: some View {
NavigationView {
Button("Open Sheet") {
showSheet.toggle()
}
}
.navigationTitle("Today")
.navigationBarTitleDisplayMode(.inline)
.bottomSheet(isPresented: $showSheet) {
Text("Hello, World")
}
}
}