繁体   English   中英

SwiftUI NavigationLink 导致推送发生,然后在完成后弹出,然后再次推送

[英]SwiftUI NavigationLink causes a push to happen, then it pops after completion, then pushes again for good

我的 SwiftUI 代码中有一些奇怪的 animation 效果。 在我展示的工作sheet中,我的根视图SafariQuickTopicView代码如下。

当我点击horizontalScroll ntalScroll 中的任何按钮时, actionState将更新为readyToTransition ,视图将推送,然后在完成后它会暂时弹回前一个视图,然后再次推送到我的新View

知道为什么要这样做吗? 我认为这可能与我已从下面的代码中删除的SafariView有关,因为它仍在发生。 该视图是符合SafariViewControllerUIViewRepresentable ,因为它的价值。

谢谢


    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    @EnvironmentObject var state: AppState

    @Binding var articleDisplayed: Bool

    @State var actionState: ActionState? = .setup

    // MARK: - Body

    var body: some View {
        NavigationView {
            ZStack(alignment: .bottom) {
                horizontalScroll
            }
            .navigationBarTitle("", displayMode: .inline)
            .navigationBarItems(trailing: passButton)
        }
    }

    // MARK: - Subviews

    private var horizontalScroll: some View {
        return ScrollView(.horizontal, showsIndicators: false) {
            HStack {
                ForEach(0..<self.multiTopics.endIndex) { i in
                    NavigationLink(destination: self.tagView, tag: .readyForTransition, selection: self.$actionState) {
                        MultiTopicView(
                            articleDisplayed: self.$articleDisplayed,
                            actionState: self.$actionState,
                            topics: self.multiTopics[i],
                            setTopics: { self.topicsWereSet(topics: self.multiTopics[i]) }
                        )
                    }
                }

                NavigationLink(destination: topicsView) {
                    Text("More Topics")
                }
            }
            .padding(.horizontal, 12)
            .frame(maxHeight: 55)
        }
        .background(Color.white)
        .padding(.top, -11)
    }

struct MultiTopicView: View {

    @Binding var articleDisplayed: Bool
    @Binding var actionState: ActionState?
    let topics: [Topic]
    let setTopics: () -> Void

    var topicNames: String {
        topics.map { $0.name }.joined(separator: ", ")
    }

    var body: some View {
        Button(action: {
            self.actionState = .readyForTransition
        }) {
            Text(self.topicNames)
        }
    }
}


您不能对每个 NavigationLink 使用相同的标签。

将 NavigationLink 绑定到选择变量并提供变量类型的标记。 将 selection 的值设置为 tag 执行导航。

https://developer.apple.com/documentation/swiftui/navigationlink

如果使用相同的标签,所有的导航链接都会同时进行导航。
这是未定义的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM