如何解决SwiftUI ToolbarItem无法显示来自NavigationLink的视图
我不知道这是否是错误,或者我在这里做错了什么。我在导航栏上添加了一个新按钮,它将显示一个新视图。
struct MyView: View {
@ObservedObject var viewModel = MyViewModel()
var body: some View {
List(viewModel.data,id: \.name) { data in
NavigationLink(destination: MyDetailView(data: data.name)) {
Text(data.name)
}
}
.listStyle(InsetGroupedListStyle())
.edgesIgnoringSafeArea(.all)
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
NavigationLink(destination: MyDetailView()) {
Text("New Element")
}
}
}
}
}
正在最新的iOS 14 beta(测试版6)和Xcode 12(测试版6)上对此进行测试。据我所知,当在列表上但在工具栏中时,导航链接可以很好地显示新视图,如图所示并非如此。工具栏上的按钮是可见的且处于活动状态,但不会触发显示新视图。
解决方法
NavigationLink
应该在内部 NavigationView
。工具栏不在NavigationView
中,在其中放置按钮。
所以假设您在父母的某个地方
NavigationView {
MyView()
}
这是一个解决方案:
struct MyView: View {
@ObservedObject var viewModel = MyViewModel()
@State private var showNew = false
var body: some View {
List(viewModel.data,id: \.name) { data in
NavigationLink(destination: MyDetailView(data: data.name)) {
Text(data.name)
}
}
.listStyle(InsetGroupedListStyle())
.background(
NavigationLink(destination: MyDetailView(),isActive: $showNew) {
EmptyView()
}
)
.edgesIgnoringSafeArea(.all)
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button("New Element") {
self.showNew = true
}
}
}
}
}
,
我发现使用带有空文本的HStack作为第一个元素也可以使用,它可以使NavigationLink正确运行。
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
HStack {
Text("")
NavigationLink(destination: SettingsView()) {
Image(systemName: "gear")
.font(.title)
}
}
}
,
如果您的导航链接指向带有键盘输入的视图,则使用Asperi解决方案可能无法正常工作。
在导航链接之后,新视图中的工具栏已正确加载,但在使用键盘提供输入并关闭键盘时所有工具栏项均消失。
解决方案是将NavigationLink不在View中,而是在NavigationBarItems中,例如:
.navigationBarItems(
leading:
NavigationLink(
destination: Creator(),isActive: $showCreator,label: {
Text("")
}))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。