![](/img/trans.png)
[英]SwiftUI NavigationLink push in onAppear immediately pops the view when using @ObservableObject
[英]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
有关,因为它仍在发生。 该视图是符合SafariViewController
的UIViewRepresentable
,因为它的价值。
谢谢
@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.