我猜这可能是 beta 3 中的一个错误,因为 NavigationView 全部损坏了。但这样的观点:
struct GenreBadge : View {
@EnvironmentObject var store: Store<AppState>
let genre: Genre
var body: some View {
NavigationLink(destination: MoviesGenreList(genre: genre).environmentObject(store)) {
RoundedBadge(text: genre.name)
}
}
}
不会触发导航堆栈中的任何推送。该视图似乎根本没有交互性。如果有人找到解决方法就好了,除非苹果记录了这种行为,否则我会认为它在 beta 4 之前就被破坏了。
Xcode 版本 11.3(11C29) 中的导航链接似乎存在错误,我已向 Apple 报告了该错误。
注意: 此问题仅出现在模拟器中。它在真实设备上运行良好。感谢@djr
以下代码在您第一次使用导航链接时按预期工作。不幸的是,第二次它变得没有反应。
import SwiftUI
struct ContentView : View {
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: SomeView()) {
Text("Hello!")
}
}
}
}
}
struct SomeView: View {
var body: some View {
Text("Detailed View")
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
您实际上在 NavigationView 内吗?以下作品。但如果我错过了你的观点,也许你可以分享更多代码。
import SwiftUI
struct ContentView : View {
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: SomeView()) {
Text("Go!")
}
}
}
}
}
struct SomeView: View {
var body: some View {
Text("Detailed View Here!")
}
}
导航链接
按下时触发导航演示的按钮。这是pushViewController的替代品
NavigationView {
NavigationLink(destination:
Text("Detail")
.navigationBarTitle(Text("Detail"))
) {
Text("Push")
}.navigationBarTitle(Text("Master"))
}
或者通过将组目标使用到它自己的视图 DetailView 中来使其更具可读性
NavigationView {
NavigationLink(destination: DetailView()) {
Text("Push")
}.navigationBarTitle(Text("Master"))
}
在 Xcode 11.3.1 中,我遇到了同样的问题,但我只需退出 Xcode 并重新启动计算机即可。这显然解决了一个问题(当然现在是 2021 年),但我能够按照苹果的 swiftui 教程进行操作,没有任何问题。我复制了这段代码并尝试了一下......对我来说效果很好。也许问题是您屏幕右下角的“播放”按钮已切换。
试试这个:
VStack{
NavigationLink(destination: DetailView()) {
Text("Push")
}.navigationBarTitle(Text("Your Text")).isDetailLink(false)
}
将您的 NavigationLink 放入 NavigationStack 中。
struct GenreBadge : View {
@EnvironmentObject var store: Store<AppState>
let genre: Genre
var body: some View {
NavigationStack {
NavigationLink(destination: MoviesGenreList(genre: genre).environmentObject(store)) {
RoundedBadge(text: genre.name)
}
}
}
}
我在 NavigationLink 内的视图有一个自定义的 onPress 属性,该属性覆盖了 NavigationLink 按。删除自定义 onPress 处理程序解决了该问题。
var listView: some View {
LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())]) {
ForEach(data, id: \.self) { d in
NavigationLink(value: d) {
SomeView(
onPress: { // Remove this onPress in SomeView, to remove onTap conflict
handleOnPress()
}
)
.frame(height: 264)
}
}
}
.navigationDestination(for: dataModel.self) { d in
ViewToPush(data: d)
}
}
试试这个:-
var body: some View {
NavigationView {
ZStack {
NavigationLink(destination: YourView()) {
Text("Go!")
}
}
}
}