标签: swiftui-navigationstack

macOS NavigationStack 使用推送和弹出动画

如何在macOS中设置 Push/Pop 动画NavigationStack?因为目前没有动画,我想推送/弹出控制器向右滑动(向左滑动),类似于AppStore应用程序

enum Nav {
    case a
}

struct MainView: View {
  
    var body: some View {
        NavigationStack {
            NavigationLink(value: Nav.a) {
                Text("Go to a")
            }
            .navigationDestination(for: Nav.self) { path in
                switch path {
                case .a:
                    Text("a")
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-animation swiftui-navigationstack

6
推荐指数
0
解决办法
225
查看次数

NavigationStack 与 TabView 结合(SwiftUI、iOS16)

结合上述观点的正确方法是什么?

截至目前,NavigationStack我的应用程序底部有一个。它显示 aLaunchView作为 root。当用户通过身份验证时,主视图将添加到堆栈中,如果没有,登录/注册视图将添加到堆栈中。这很好用。

NavigationStack(path: self.$vm.path) {
        LaunchView()
            .navigationDestination(for: Authentication.self) { value in
                switch value {
                    case .login:
                        LoginView(vm: LoginViewModel() { type, action in
                            ...
                        })
                    case .verify: // let .verify(email)
                        VerifyMailView(vm: VerifyMailViewModel() { type, action in
                            ...
                        })
                    case .authenticated:
                        AuthenticatedView() { type, action in
                            self.vm.set(type: type) { value in
                                ...
                            }
                        }
                }
            }
        
    }
Run Code Online (Sandbox Code Playgroud)

AuthenticatedView由一个具有三个视图的视图组成TabView。问题来了。我以为我可以直接在它们上设置三个视图的标题和工具栏,但事实并非如此。但是,我不想也不能在选项卡视图中设置标题或工具栏,因为它们需要来自视图视图模型的数据(拥有TabView且不应该拥有访问权限)。

TabView(selection: self.$vm.index) {
        DiscoverView(vm: DiscoverViewModel(account: self.vm.$account, type: self.type))
        .tabItem {
            Image(self.vm.index == …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-tabview ios16 swiftui-navigationstack

5
推荐指数
1
解决办法
3923
查看次数

navigationDestination(isPresented) 与 swiftui 4 中的路径

我试图弹回到特定的视点或根视图,并使用 navigationDestination(isPresented) 来推送视图。

这是我正在使用的代码的更简单版本

import SwiftUI

struct View1: View {
    
    @State var goToView2 = false
    @State var path = NavigationPath()
    
    var body: some View {
        NavigationStack(path: $path) {
            VStack {
                Text("View 1")
                
                Button("Go to View 2") {
                    goToView2 = true
                }
            }.navigationDestination(isPresented: $goToView2) {
                View2(path: $path)
            }
        }
    }
}

struct View2: View {
    
    @State var goToView3 = false
    @Binding var path: NavigationPath
    
    var body: some View {
        VStack {
            Text("View 2")
            
            Button("Go to View 3") {
                goToView3 = true …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationstack

5
推荐指数
0
解决办法
1408
查看次数

点击 NavigationSplitView 上的不同按钮时如何避免重建视图

我尝试过苹果示例 为您的 SwiftUI 应用程序带来强大的导航结构

所以我的代码看起来像这样

        NavigationSplitView(
            columnVisibility: $navigationModel.columnVisibility
        ) {
            List(
                categories,
                selection: $navigationModel.selectedCategory
            ) { category in
                NavigationLink(category.localizedName, value: category)
            }
            .navigationTitle("Categories")
            .toolbar {
                ExperienceButton(isActive: $showExperiencePicker)
            }
        } detail: {
            NavigationStack(path: $navigationModel.recipePath) {
                RecipeGrid(category: navigationModel.selectedCategory)
            }
        }
Run Code Online (Sandbox Code Playgroud)

详情查看

struct RecipeGrid: View {
    var category: Category?
    var dataModel = DataModel.shared

    var body: some View {
        ZStack {
            if let category = category {
                ScrollView {
                    LazyVGrid(columns: columns) {
                        ForEach(dataModel.recipes(in: category)) { recipe in
                            NavigationLink(value: recipe) {
                                RecipeTile(recipe: recipe)
                            }
                            .buttonStyle(.plain) …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink swiftui-navigationsplitview swiftui-navigationstack

5
推荐指数
1
解决办法
454
查看次数

macOS 上的 NavigationStack 中的动画过渡

我制作了一个简单的 macOS 应用程序,并NavigationStack使用NavigationLink(value:label:). 它的效果非常好,只是根本没有动画。是否可以通过这种方式添加动画NavigationStack?我无法使用withAnimation {},因为这不是NavigationLink工作原理。

macos swiftui swiftui-navigationstack

5
推荐指数
1
解决办法
458
查看次数

NavigationSplitView 内的 SwiftUI NavigationStack 无法在 iPhone 和 iPad 上运行

我正在尝试使用NavigationStack内部NavigationSplitView

struct ContentView: View {
    @State var mainMenu: MenuItem?
    @State var subMenu: SubMenuItem?
    
    var body: some View {
        NavigationSplitView {
            List(MenuItem.allCases, selection: $mainMenu) { item in
                NavigationLink(value: item) {
                    Text(item.rawValue)
                }
            }
        } detail: {
            NavigationStack {
                List(SubMenuItem.allCases, selection: $subMenu) { item in
                    NavigationLink(value: item) {
                        Text(item.rawValue)
                    }
                }
                .navigationDestination(for: SubMenuItem.self) { selected in
                    DetailView(item: selected)
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
struct DetailView: View {
    let item: SubMenuItem
    
    var body: some View {
        Text(item.id)
    }
} …
Run Code Online (Sandbox Code Playgroud)

ios swiftui swiftui-navigationlink swiftui-navigationsplitview swiftui-navigationstack

4
推荐指数
1
解决办法
4113
查看次数

在 SwiftUI 中使用 NavigationStack 背后的自定义背景

这应该很简单,但我不知道如何在 NavigationStack 后面放置背景。对于 NavigationView,只需嵌入 ZStack 中,并在 NavigationView 之前调用背景视图即可(如旧文章中所述:如果在 SwiftUI 中使用 NavigationView,如何更改背景颜色?)相同的技术对我来说不适用于 NavigationStack 。这是我所拥有的:

   struct MyAngularGradient: View {
    var body: some View {
        ZStack {
            AngularGradient(gradient: Gradient(colors: [.red, .orange , .yellow, .green, .cyan, .blue, .indigo, .purple, .red]), center: .leading)
            AngularGradient(gradient: Gradient(colors: [.red, .orange , .yellow, .green, .cyan, .blue, .indigo, .purple, .red]), center: .leading)
                .offset(x: -8)
        }
        .ignoresSafeArea()
    }
}

var body: some View {
            ZStack{
                MyAngularGradient()
                NavigationStack {
                  ...
                }
                 .navigationViewStyle(.stack)
             } // end ZStack
Run Code Online (Sandbox Code Playgroud)

仅供参考,我在其他应用程序(带有 NavigationView)中使用了相同的 MyAngularGradient() 有什么想法吗?谢谢。

swiftui swiftui-navigationstack

4
推荐指数
1
解决办法
2845
查看次数

是否可以使用 SwiftUI AttributedString 中的链接导航到同一应用程序中的另一个视图?

我知道使用 AttributedString,我可以使用以下内容链接到外部网站:

Text("To learn more about AttributedString visit [this page](https://developer.apple.com/documentation/foundation/attributedstring/)")

我可以使用它在同一个应用程序中从 ViewA 转到 ViewB,有点像 Twitter 中的这个示例吗?

推特

deep-linking swift swiftui swiftui-navigationstack

4
推荐指数
1
解决办法
861
查看次数

SwiftUI 中新的 NavigationStack 过渡,如何从默认幻灯片更改为自定义或显示?

我有 NavigationStack 及其自己的导航链接,用于 iOS16 开发。

如何更改要显示的默认幻灯片过渡或自定义过渡?

另外,您是否在 NavigationStack 或 NavigationLink 上应用转换?

这是我的代码:

import SwiftUI

struct TestView: View {
    var body: some View {
        NavigationStack() {
            NavigationLink ("Link", value: "Any Value")
                .navigationDestination(for: String.self) { textValue in
                    destinationView(textValue: textValue)
                }
        }
    }
}

struct destinationView: View {
    let textValue: String
    var body: some View {
            Text(textValue)
    }
}
Run Code Online (Sandbox Code Playgroud)

如何更改默认转换?

swiftui swiftui-navigationlink swiftui-animation swiftui-navigationsplitview swiftui-navigationstack

4
推荐指数
1
解决办法
3681
查看次数

当将新值推送到 NavigationStack 时,SwiftUI 的 navigationDestination 已在堆栈的早期声明

我正在尝试在 SwiftUI 中重新创建许多社交媒体应用程序中看到的帐户关注者流程。

\n
    \n
  1. 您按下个人资料上的按钮即可查看您的关注者列表
  2. \n
  3. 您可以点击您的任何一位关注者来查看他们的帐户
  4. \n
  5. 您可以按他们个人资料上的按钮来查看他们的关注者列表
  6. \n
  7. 您可以点击他们的任何一位关注者来查看他们的帐户
  8. \n
\n

步骤 3 和 4 可以永远继续下去(下面是另一个例子):

\n
MyProfile -> Followers (my followers list) -> FollowerView -> Followers (their followers list) -> FollowerView -> Followers (their followers list) -> FollowerView and so on...\n
Run Code Online (Sandbox Code Playgroud)\n

然而,通过运行下面的实现,XCode 控制台会打印:

\n
\n

\xe2\x80\x9cmyApp.SomeProfile\xe2\x80\x9d 的 navigationDestination 已在堆栈的较早位置声明。仅使用最接近堆栈根视图声明的目标。

\n
\n

我知道为什么会这样,但不确定如何解决这个问题。我也认为用作值的类型是否NavigationLink合适,因为它是Int。将其替换为更自定义的类型会更好吗?

\n

任何帮助将不胜感激。

\n
// Enum with custom options\nenum ViewOptions: Hashable {\n    case followers(Int)\n    \n    @ViewBuilder func view(_ path: Binding<NavigationPath>, …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-navigationlink swiftui-navigationstack

4
推荐指数
1
解决办法
2835
查看次数