美文网首页
如何在 SwiftUI 中自定义 NavigationLink

如何在 SwiftUI 中自定义 NavigationLink

作者: 启发禅悟 | 来源:发表于2024-06-15 12:08 被阅读0次

解决方案:就是利用ZStack,把NavigationLink变成透明层,再覆盖上原先在label中需要显示的内容层

// HACK: ZStack with zero opacity + EmptyView
// Hides default chevron accessory view for NavigationLink
ZStack {
    NavigationLink {
        AboutView()
    } label: {
        EmptyView()
    }
    .opacity(0)

    Label(title: "About", icon: Image(systemName: "info.circle"))
}

如果不想到处重复的使用这类代码,我们可以定义一个自己的类

struct BetterNavigationLink<Label: View, Destination: View>: View {
    let label: () -> Label
    let destination: () -> Destination

    init(@ViewBuilder label: @escaping () -> Label,
         @ViewBuilder destination: @escaping () -> Destination) {
        self.label = label
        self.destination = destination
    }

    var body: some View {
        // HACK: ZStack with zero opacity + EmptyView
        // Hides default chevron accessory view for NavigationLink
        ZStack {
            NavigationLink {
                self.destination()
            } label: {
                EmptyView()
            }
            .opacity(0)

            self.label()
        }
    }
}

使用BetterNavigationLink代替NavigationLink即可

BetterNavigationLink {
    Label(title: "About", icon: Image(systemName: "info.circle"))
} destination: {
    AboutView()
}

参考: How to customize NavigationLink accessory views in SwiftUI

相关文章

网友评论

      本文标题:如何在 SwiftUI 中自定义 NavigationLink

      本文链接:https://www.haomeiwen.com/subject/adczqjtx.html