У меня есть специальное оповещение, которое я показываю как в листе, так и в обычном представлении. У меня также есть сетка позади предупреждения, охватывающая весь лист (непонятно, почему она не отображается в этом примере кода), и на листе также есть видимый индикатор перетаскивания (который опять же не отображается в примере кода).
В любом случае, мои вопросы:
[*]Как отключить кнопку навигации «Назад» при отображении специального оповещения? [*]Scrim закрывает лист, но слегка видимый вид сверху за листом не закрыт. Есть ли способ покрыть всю высоту экрана сеткой? [*]Есть ли способ отключить индикатор перетаскивания листа при наличии специального оповещения?
Я использую версию iOS 16.4
Код:
импортировать SwiftUI импортный фонд структура ContentView: Просмотр { @State Private var showDetails = false var body: some View { Навигационный стек { ВСтек { Button("Показать лист А") { шоуДетали = правда } } .sheet(isPresented: $showDetails) { Контентвиев1() } } } } структура ContentView1: Просмотр { @State Private var showDetails = false var body: some View { Навигационный стек { ВСтек { Button("Показать лист Б") { шоуДетали = правда } } .navigationDestination(isPresented: $showDetails) { Контентвиев2() } .presentationDragIndicator(.visible) } } } структура ContentView2: Просмотр { @State Private var showAlert = false var body: some View { ВСтек { Кнопка("Показать оповещение") { шоуАлерт = правда } } .navigationTitle("Настройки") .customAlert(isPresented: $showAlert) .presentationDragIndicator(.visible) } } структура CustomAlertView: ViewModifier { @Binding var isPresented: Bool init(isPresented: Binding) { self._isPresented = isPresented } тело функции (содержание: Содержание) -> некоторый вид { content.animation(nil, значение: self.$isPresented.wrappedValue) .overlay(self.$isPresented.wrappedValue ? Color.gray.opacity(0.4) : nil) /// Фоновый холст, который не знает, почему он не виден. .overlay(self.$isPresented.wrappedValue? alertContent(): ноль) .animation(.default, значение: self.$isPresented.wrappedValue) } @ViewBuilder частная функция alertContent() -> some View { GeometryReader { геометрия в если self.$isPresented.wrappedValue { ВСтек { Text("title").foregroundColor(Color.black).font(.title2).bold().lineLimit(ноль) .padding([.leading, .trailing], 20.0).padding(.top, 16.0) Разделитель() Text("сообщение").foregroundColor(Color.вторичный).font(.body).bold().lineLimit(ноль) .padding([.leading, .trailing], 20.0).padding(.top, 16.0) Разделитель() Надпись на кнопке { }: { Текст («Нажми на меня») } .frame(ширина: 250,0, высота: 20,0).padding(10,0).background(Color.blue) .foregroundColor(.white).font(.body) }.fixedSize(по горизонтали: ложь, по вертикали: правда).background(Color.gray).cornerRadius(28) .clipped().padding([.leading, .trailing], 5.0) .position(x: Geometry.size.width/2, y: Geometry.size.height/2).frame(ширина: 328,0) } } } } расширение Просмотр { func customAlert(isPresented: Binding) -> some View { модификатор возврата (CustomAlertView (isPresented: isPresented)) } }

Я попробовал установить .presentationBackgroundInteraction(.disabled) для содержимого в модификаторе пользовательского оповещения, но это тоже не сработало.