Я работаю над сложным приложением со слишком большим количеством кода, но я попытался создать образец приложения с необходимым работающим кодом, чтобы объяснить мою проблему.
Допустим, у меня есть контент представление с помощью кнопки, которая открывает модальное окно/лист (с именем «Основной вид») с заголовком навигации, панелью поиска и кнопкой. В этом основном представлении строка поиска и заголовок навигации расположены правильно. Когда я нажимаю кнопку с основным видом, он переходит к другому представлению (названному «Подпредставление»), которое имеет панель поиска, заголовок навигации и, в конечном итоге, будет иметь кнопку «Назад» для возврата к основному представлению. В этом дополнительном представлении я вижу, что заголовок навигации и панель поиска расположены неправильно, т. е. между заголовком навигации и панелью поиска много места.
Не могу выяснить причину это и как это исправить... есть какие-нибудь идеи или мысли по этому поводу? Это из-за двух стеков навигации, то есть одного в структуре SampleAppApp, а другого в структуре MainView? Код:
Я работаю над сложным приложением со слишком большим количеством кода, но я попытался создать образец приложения с необходимым работающим кодом, чтобы объяснить мою проблему. Допустим, у меня есть контент представление с помощью кнопки, которая открывает модальное окно/лист (с именем «Основной вид») с заголовком навигации, панелью поиска и кнопкой. В этом основном представлении строка поиска и заголовок навигации расположены правильно. Когда я нажимаю кнопку с основным видом, он переходит к другому представлению (названному «Подпредставление»), которое имеет панель поиска, заголовок навигации и, в конечном итоге, будет иметь кнопку «Назад» для возврата к основному представлению. В этом дополнительном представлении я вижу, что заголовок навигации и панель поиска расположены неправильно, т. е. между заголовком навигации и панелью поиска много места. Не могу выяснить причину это и как это исправить... есть какие-нибудь идеи или мысли по этому поводу? Это из-за двух стеков навигации, то есть одного в структуре SampleAppApp, а другого в структуре MainView? [b]Код:[/b] [code]import SwiftUI import Foundation import Combine
@main struct SampleAppApp: App { var body: some Scene { WindowGroup { NavigationStack { ContentView() } } } }
// MARK: Code for Main View after "Click ME" is clicked struct MainView: View { @State private var searchText = "" let searchTextPublisher = PassthroughSubject()
/// Set to true when the panel is displayed. Dismisses the panel when set to false. var isPresented: Binding @State private var showSubView: Bool = false
var body: some View { NavigationStack { ZStack { Color(red: 0.95, green: 0.95, blue: 0.97).edgesIgnoringSafeArea(.all) VStack { VStack { Button("Tap to open sub-view", action: { self.showSubView.toggle() }).padding(.top, 20.0) } .navigationDestination(isPresented: $showSubView) { SubView() }
MainViewSearchResultListAndNavTitle() .searchable( text: $searchText, placement: .navigationBarDrawer(displayMode: .always), prompt: "search" ) .onChange(of: searchText) { newText in searchTextPublisher.send(newText) /// Publishes when a search term is changed. This is used to debounce the search. } Spacer() } .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color(red: 0.95, green: 0.95, blue: 0.97)) } } .presentationDetents([.large]) .interactiveDismissDisabled(true) .presentationBackgroundInteraction(.enabled) } }
// MARK: Code for Sub View after "Tap to open sub-view" is clicked. This view will have back button to go back to 2nd view i.e. "Main View". struct SubView: View { var body: some View { ZStack { Color(red: 0.95, green: 0.95, blue: 0.97).edgesIgnoringSafeArea(.all) VStack { SubViewSearchResultsListAndNavTitle() .searchable( text: .constant(""), placement: .navigationBarDrawer(displayMode: .always), prompt: "search" ) Spacer() } .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color(red: 0.95, green: 0.95, blue: 0.97)) } } }