带有 SwiftUI 的 tvOS 上的 NavigationLink 按钮无法正常工作
NavigationLink buttons on tvOS with SwiftUI not working
我正在尝试使用 Swift 在 Apple TV 上构建一个简单的导航 UIUI:
据我所知,我需要将 NavigationLink
或 NavigationLink
与 Button
结合使用。
我已经尝试了几种实现方式,其中 none 成功了:
NavigationLink(destination: view2) {
Image("placeholder").frame(width:400, height: 300)
Text("Button")
}
NavigationLink(destination: view2) {
Button(action: {print("hey")}) {
VStack{
Image("placeholder").frame(width:400, height: 300)
Text("Button")
}
}
}
Button(action: {print("hi1")}) {
VStack{
Image("placeholder").frame(width:400, height: 300)
Text("Button")
}
}.background(NavigationLink(destination: view2) { Text("hi2") })
NavigationLink(destination: view2) {
Text("hey")
}.background(Button(action: {print("hey")}) {
VStack{
Image("placeholder").frame(width:400, height: 300)
Text("Button")
}
})
前两个无法使用 Magic Remote 进行选择:它们不会成为焦点。当我按下最后一个时,它们根本不会导航到另一个视图。
如何使用 Swift 在 tvOS 上实现这种导航方式UI?
NavigationLink
独立运行,仅在 watchOS 上运行(这可能会造成混淆),在所有其他受支持的操作系统中,它应该包含在 NavigationView
中操作,所以
伪代码
NavigationView {
// ... some code
NavigationLink(...) // must be anywhere inside
// ... other code
}
我正在尝试使用 Swift 在 Apple TV 上构建一个简单的导航 UIUI:
据我所知,我需要将 NavigationLink
或 NavigationLink
与 Button
结合使用。
我已经尝试了几种实现方式,其中 none 成功了:
NavigationLink(destination: view2) {
Image("placeholder").frame(width:400, height: 300)
Text("Button")
}
NavigationLink(destination: view2) {
Button(action: {print("hey")}) {
VStack{
Image("placeholder").frame(width:400, height: 300)
Text("Button")
}
}
}
Button(action: {print("hi1")}) {
VStack{
Image("placeholder").frame(width:400, height: 300)
Text("Button")
}
}.background(NavigationLink(destination: view2) { Text("hi2") })
NavigationLink(destination: view2) {
Text("hey")
}.background(Button(action: {print("hey")}) {
VStack{
Image("placeholder").frame(width:400, height: 300)
Text("Button")
}
})
前两个无法使用 Magic Remote 进行选择:它们不会成为焦点。当我按下最后一个时,它们根本不会导航到另一个视图。
如何使用 Swift 在 tvOS 上实现这种导航方式UI?
NavigationLink
独立运行,仅在 watchOS 上运行(这可能会造成混淆),在所有其他受支持的操作系统中,它应该包含在 NavigationView
中操作,所以
伪代码
NavigationView {
// ... some code
NavigationLink(...) // must be anywhere inside
// ... other code
}