Ошибка навигации при закрытии представления при фокусировании на пустом модификаторе .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))
}
}