[英]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.