Ошибка навигации при закрытии представления при фокусировании на пустом модификаторе .searchable()

При попытке вернуться из представления, используя значение Dismiss среды, а также фокусируясь на пустом модификаторе с возможностью поиска, представление, к которому вы перешли обратно, перестает отвечать на запросы. Это связано с тем, что пустой UIView блокирует любое взаимодействие с представлением, как показано на этом снимке экрана:

Пустой блокирующий вид UIView после перехода назад

Это происходит только тогда, когда панель поиска сфокусирована и пуста при попытке вернуться назад. Когда в строке поиска есть значение, все работает:

GIF ошибки

Я делаю что-то не так здесь?

Протестировано на симуляторе Xcode 14.2 iPhone 14 Pro (iOS 16.0).

      import SwiftUI

struct MainPage: View {
    var body: some View {
        if #available(iOS 16.0, *) {
            NavigationStack {
                Text("Main view")
                NavigationLink(destination: DetailView()) {
                    Text("Click me")
                }
            }
        }
    }
}

struct DetailView: View {
    @Environment(\.dismiss) private var dismiss
    @State private var searchText = ""
    
    var body: some View {
        VStack {
            Text("Detail view")
            Button("Go back") {
                dismiss()
            }
        }
        .searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always))
    }
}

Эта ошибка возникает только при использовании NavigationStack или NavigationView с .navigationViewStyle(.stack). При использовании NavigationView без navigationViewStyle кажется, что он работает нормально. В настоящее время я могу обойти это, используя последний, но я бы предпочел использовать NavigationStack, поскольку NavigationView устарел с iOS 16.0.

Любая помощь приветствуется.

1 ответ

Я отправил отчет об ошибке в Apple, но до сих пор не получил от них ответа.

На данный момент я обошел эту проблему, установив привязку searchText к пробелу " ", что, похоже, помогает.

      import SwiftUI

struct MainPage: View {
    var body: some View {
        if #available(iOS 16.0, *) {
            NavigationStack {
                Text("Main view")
                NavigationLink(destination: DetailView()) {
                    Text("Click me")
                }
            }
        }
    }
}

struct DetailView: View {
    @Environment(\.dismiss) private var dismiss
    @State private var searchText = ""
    
    var body: some View {
        VStack {
            Text("Detail view")
            Button("Go back") {
                // Setting the searchtext to anything else but an empty string makes this work
                searchText = " " // <---
                dismiss()
            }
        }
        .searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always))
    }
}
Другие вопросы по тегам