SwiftUI 导航栏中的按钮只能点击一次

5
将按钮移动到导航栏中只有在附有弹出窗口时才能触发一次。该按钮用于显示搜索窗口,但一旦弹出窗口关闭,该按钮仍将保持不活动状态。
下面的代码是我尝试使用的简化版本。起初,我在主要部分使用了一个按钮来激活搜索窗口,但我认为使用导航栏会占用更少的空间。激活操作可行,但在那种情况下我无法停止它。
import SwiftUI

struct ContentView: View {
    @State var showingSearch: Bool = false

    var body: some View {
        NavigationView {
            VStack {
                Text("Hello World!")
                Button(
                    action: { self.showingSearch = true },
                    label: { Image(systemName: "magnifyingglass") }
                )
                .sheet(
                    isPresented: $showingSearch,
                    content: { Search( showingSearch: self.$showingSearch ) }
                )
            }

            .navigationBarItems(
                leading: Image(systemName: "square.and.pencil"),
                trailing: Button(
                        action: { self.showingSearch = true },
                        label: { Image(systemName: "magnifyingglass") }
                    )
                    .sheet(
                        isPresented: $showingSearch,
                        content: { Search( showingSearch: self.$showingSearch ) }
                    )
            )
        }
    }
}

struct Search: View {
    @Binding var showingSearch: Bool

    var body: some View {
        NavigationView {
            Text("Search")
            .navigationBarTitle("Search", displayMode: .inline)
            .navigationBarItems(trailing:
                Button(
                    action: { self.showingSearch = false },
                    label: {Image(systemName: "clear") }
                )
            )
        }
    }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

我期望这两个按钮的行为应该是一样的。两个放大镜都应该激活搜索窗口,清除按钮应该将其关闭以便进行新的尝试,但似乎导航栏中的按钮没有看到showingSearch的变化。


2
这似乎与https://dev59.com/2bTna4cB1Zd3GeqPC_di有关。 - Zain
我也认为这是相同的根本原因。 - Michael Salmon
1个回答

2

这是与导航栏项目有关的已知错误,不仅限于表格,似乎影响任何模态窗口,当使用模态转场时,在IB中也会遇到同样的问题。

不幸的是,这个问题在11.3版本中仍然存在,希望他们能尽快解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接