Модальная презентация с NavigationView - PullRequest
3 голосов
/ 14 октября 2019

Мне нужно представить представление с помощью ModalPresentation, и оно содержит NavigationView и ScrollView, потому что содержимое будет формой со многими полями.

Мой код выглядит следующим образом и работает правильно в портретном режиме, но когда яПерейдите в режим альбомной ориентации, содержимое исчезнет, ​​и ничего не отобразится.

struct ContentView: View {
    @State var showingDetail = false

    var body: some View {
        Button(action: {
            self.showingDetail.toggle()
        }) {
            Text("Show Detail")
        }.sheet(isPresented: $showingDetail) {
            Detail()
        }
    }
}


struct Detail: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    var body: some View {
        NavigationView {
            ScrollView {
                VStack {
                Text("Details view")
                Text("Details view")
                }

            }
            .navigationBarTitle("Booking", displayMode: .inline)

            .navigationBarItems(trailing:
                Button(action: {
                    self.presentationMode.wrappedValue.dismiss()
                    print("close")
                }) { Image(systemName: "xmark")  }).accentColor(.pink)

        }
    }
}

Любые предложения по работе как: книжной, так и альбомной.

  • ПРИМЕЧАНИЕ. При отмене NavigationView, это работает.

ОБНОВЛЕНИЕ Просмотр изображения: в альбомной ориентации это отображается, но если скользить слева, но я хочу, чтобы оно отображалось без скольжения.

Landscape

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

VStack должен быть выровнен -> VStack(alignment: HorizontalAlignment.center)

С этим вы должны работать правильно

struct Detail: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    var body: some View {
        NavigationView {
            ScrollView {

                VStack(alignment: HorizontalAlignment.center) {
                     Text("Width: ")
                     Text("Height: ")

                 }

            }

            .navigationBarTitle("Booking", displayMode: .inline)

            .navigationBarItems(trailing:
                Button(action: {
                    self.presentationMode.wrappedValue.dismiss()
                    print("close")
                }) { Image(systemName: "xmark")  }).accentColor(.pink)



        } .environment(\.horizontalSizeClass, .compact)
    }
}

enter image description here

0 голосов
/ 14 октября 2019

В вашем коде нет ничего плохого. Вам просто нужно использовать следующий режим .compact для поддержки альбомной ориентации:

NavigationView {
    ...
}.environment(\.horizontalSizeClass, .compact)

Это прекрасно работает для меня в бета-версии Xcode версии 11.2 (11B41) с iPhone Xs Max под управлением iOS 13.1.2.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...