swift 如果键盘处于打开状态,则使用可搜索修饰符从视图导航回后,视图冻结

beq87vna  于 2023-04-28  发布在  Swift
关注(0)|答案(1)|浏览(122)

问题:如果导航视图具有searchable修饰符,并且当您选择可搜索字段(因此键盘打开)时,如果您通过选择一个项目弹出此视图,则第一个视图将冻结(不响应任何用户输入)。此问题仅发生在可搜索字段中,而不发生在任何其他文本字段中。此外,问题仅存在于iOS 16中,因为iOS 15中没有问题。**
Xcode:14.3
项目目标版本:iOS 15
模拟器和设备版本:iOS 16
再现问题代码:

struct ContentView: View {
    private let options: [String] = ["ABC", "DEF", "GHI", "JKL", "MNO"]
    @State private var selection: String?
    var body: some View {
        NavigationView {
            NavigationLink {
                CustomPicker(selection: $selection, options: options)
            } label: {
                HStack {
                    Text("Picked value")
                    Spacer()
                    Text(selection ?? "Pick >")
                }
                .accentColor(.black)
            }
            .padding()
        }
        .navigationViewStyle(.stack)
    }
}

struct CustomPicker: View {
    @Environment(\.dismiss) private var dismiss
    @Binding var selection: String?
    let options: [String]
    var body: some View {
        List(options, id: \.self) { option in
            Button {
                selection = option
                dismiss()
            } label: {
                Text(option)
            }
        }
        .searchable(text: .constant(""))
    }
}

我尝试在NavigationLink(isActive: )中使用isActive关闭视图,但它不起作用。

fd3cxomn

fd3cxomn1#

几个月前我也遇到过同样的问题:Navigation bug when dismissing view while focussing on empty .searchable() modifier
我向苹果公司提交了一份错误报告,但尚未收到他们的任何反馈。
现在,我通过设置我的。searchable()绑定到一个空间““,然后再导航离开,这似乎对我有用。
你可以试试这样的方法:

struct CustomPicker: View {
@Environment(\.dismiss) private var dismiss
@Binding var selection: String?
@State var mySearchText: String // <---
let options: [String]
var body: some View {
    List(options, id: \.self) { option in
        Button {
            selection = option
            mySearchText = " " <---
            dismiss()
        } label: {
            Text(option)
        }
    }
    .searchable(text: $mySearchText) // <---
}

}

相关问题