Я заметил довольно странное, возможно, ошибочное поведение в SwiftUI с использованием iOS 13.3.1 и более ранних версий. Чтобы продемонстрировать, это очень простой сценарий:
Полный пример кода:
import SwiftUI
struct ContentView: View {
@State var showingSheet: Bool = false
var body: some View {
NavigationView {
Text("ParentView")
.navigationBarItems(trailing: Button(action: { self.showingSheet = true }) { Text("Show") })
}.sheet(isPresented: $showingSheet) { SheetView() }
}
}
struct SheetView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text("Sheet content")
Button(action: { self.presentationMode.wrappedValue.dismiss() }) { Text("Hide") }
}
}
}
Воспроизвести:
- Запустите приложение на iOS 13.4.1
- Нажмите кнопку «Показать»
- (лист показывает, как и ожидалось)
- Отклоните лист, используя кнопка «Скрыть»
- (лист распускается, как и ожидалось)
- Попробуйте снова показать лист, используя кнопку «Показать»
Ожидаемый результат : лист снова отображается.
Фактический результат : цель нажатия кнопки «Показать» смещается на несколько пикселей вниз, в результате чего действие не запускается , Это также можно наблюдать в отладчике иерархии представлений:

Другие наблюдения:
- Этого не происходит при отклонении листа путем перетаскивания его в нижнюю часть экрана.
- . Это происходит только в том случае, если для представления хоста активированы большие заголовки элементов навигации, это нормально при использовании встроенного заголовка