导航栏中的 SwiftUI 按钮只能使用一次
SwiftUI button in navigation bar only works once
将按钮向上移动到导航栏中只会在它附加了 sheet 时触发一次。该按钮用于显示搜索 window 但一旦弹出窗口关闭,该按钮将保持不活动状态。
所附代码是我尝试过的代码的简化版本。起初我在主要部分使用了一个按钮来激活搜索window,但我认为导航栏会占用更少space。激活有效,但在那种情况下我无法停用它。
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
我希望这两个按钮的行为应该相同。两个放大镜都应该激活搜索 window 并且清除按钮应该将其停用以准备进行新的尝试,但导航栏中的按钮似乎没有看到 showingSearch 中的变化。
这是一个与导航栏项目相关的已知错误,不仅限于工作表,它似乎会影响任何模态,我在 IB 中遇到过它,就像使用模态转场时一样。
不幸的是,这个问题在 11.3 版本中仍然存在,希望他们能尽快解决这个问题。
将按钮向上移动到导航栏中只会在它附加了 sheet 时触发一次。该按钮用于显示搜索 window 但一旦弹出窗口关闭,该按钮将保持不活动状态。
所附代码是我尝试过的代码的简化版本。起初我在主要部分使用了一个按钮来激活搜索window,但我认为导航栏会占用更少space。激活有效,但在那种情况下我无法停用它。
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
我希望这两个按钮的行为应该相同。两个放大镜都应该激活搜索 window 并且清除按钮应该将其停用以准备进行新的尝试,但导航栏中的按钮似乎没有看到 showingSearch 中的变化。
这是一个与导航栏项目相关的已知错误,不仅限于工作表,它似乎会影响任何模态,我在 IB 中遇到过它,就像使用模态转场时一样。
不幸的是,这个问题在 11.3 版本中仍然存在,希望他们能尽快解决这个问题。