[英]SwiftUI ViewModifier not working as a NavigationLink
我有以下ViewModifier
但它不起作用:
import SwiftUI
struct NavLink: ViewModifier {
let title: String
func body(content: Content) -> some View {
NavigationLink(destination: content) {
Text(title)
}
}
}
extension View {
func navLink(title: String) -> some View {
modifier(NavLink(title: title))
}
}
如果我按如下方式使用它:
import SwiftUI
struct MainScreen: View {
var body: some View {
NavigationStack() {
VStack {
// This does not work
NavStackScreen()
.navLink(title: "Nav Stack")
// But this does
Helper.linked(to: NavStackScreen(), title: "Nav Stack 2")
}
}
}
}
struct Helper {
static func linked(to destination: some View, title: String) -> some View {
NavigationLink(destination: destination) {
Text(title)
}
}
}
它创建链接并在点击时将新视图推送到屏幕上; 但是,NavStackScreen 的内容不显示,只是一个空屏幕。 关于发生了什么的任何想法?
NavStackScreen 的内容供参考:
struct NavStackScreen: View {
var body: some View {
Text("Nav Stack Screen")
.font(.title)
.navigationTitle("Navigation Stack")
}
}
如果我在辅助结构中使用静态辅助函数,那么它可以正常工作:
static func linked(to destination: some View, title: String) -> some View {
NavigationLink(destination: destination) {
Text(title)
}
}
我添加了 MainView 的完整代码以供参考,并用更多细节更新了示例,以便于复制。
修饰符不起作用,因为content
参数不是被修改的实际视图,而是一个代理:
content 是视图的代理,它将应用 Self 表示的修饰符。
参考。
这是对修改器的快速调试显示的内容:
(lldb) po content
SwiftUI._ViewModifier_Content<SwiftUIApp.NavLink>()
由于代理是 SwiftUI 的一种内部类型,我们无法确定NavigationLink
为什么不能使用它。
一种解决方法是跳过修饰符,仅在View
上添加扩展名:
extension View {
func navLink(title: String) -> some View {
NavigationLink(destination: content) {
Text(title)
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.