Ios SwiftUI NavigationLink导致推送,然后在完成后弹出,然后再次推送
我的SwiftUI代码中有一些奇怪的动画效果。在我的Ios SwiftUI NavigationLink导致推送,然后在完成后弹出,然后再次推送,ios,swift,swiftui,Ios,Swift,Swiftui,我的SwiftUI代码中有一些奇怪的动画效果。在我的工作表中,我的根视图SafariQuickTopicView代码如下 当我点击myhorizontalScroll中的任何按钮时,操作状态将更新为readyToTransition,视图将按下,然后在完成时,它将临时弹出到上一个视图,然后再次按下,直到我的新视图 知道它为什么这么做吗?我想这可能与我的SafariView有关,我已经从下面的代码中删除了它,因为它仍然在发生。该视图是一个符合UIViewRepresentable的SafariVi
工作表
中,我的根视图SafariQuickTopicView代码如下
当我点击myhorizontalScroll
中的任何按钮时,操作状态将更新为readyToTransition
,视图将按下,然后在完成时,它将临时弹出到上一个视图,然后再次按下,直到我的新视图
知道它为什么这么做吗?我想这可能与我的SafariView
有关,我已经从下面的代码中删除了它,因为它仍然在发生。该视图是一个符合UIViewRepresentable
的SafariViewController
谢谢
@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)
}
}
}
@环境(\.presentationMode)变量presentationMode:绑定
@EnvironmentObject变量状态:AppState
@绑定变量:Bool
@状态变量actionState:actionState?=。设置
//马克:身体
var body:一些观点{
导航视图{
ZStack(对齐:。底部){
水平卷轴
}
.navigationBarTitle(“,显示模式:。内联)
.navigationBarItems(尾部:passButton)
}
}
//标记:-子视图
私有变量水平滚动:一些视图{
返回滚动视图(.horizontal,showsIndicators:false){
HStack{
ForEach(0..Void
变量topicNames:String{
topics.map{$0.name}.joined(分隔符:“,”)
}
var body:一些观点{
按钮(操作:{
self.actionState=.readyForTransition
}) {
文本(self.topicNames)
}
}
}
不能对每个导航链接使用相同的标记
将NavigationLink绑定到选择变量并提供该变量类型的标记。将选择值设置为标记将执行导航
如果使用同一标记,所有导航链接将同时执行导航。
这是未定义的行为。不能对每个导航链接使用相同的标记
将NavigationLink绑定到选择变量并提供该变量类型的标记。将选择值设置为标记将执行导航
如果使用同一标记,所有导航链接将同时执行导航。
这是未定义的行为。这是不可测试的,但正如我看到的,所有链接都有相同的标记,所以激活一个,你就激活了所有的标记…在这之后,一切都是不可预测的,可能会导致任何结果。每个链接的标记必须是唯一的,就像标识符一样-指定应该激活的链接。你在哪里看到标记需要是唯一的?我没有发现在苹果的docsIt中是不可测试的,但我看到你所有的链接都有相同的标签,所以激活一个,你就激活它们所有…在这之后,一切都是不可预测的,可能会导致任何结果。每个链接的标签必须是唯一的,就像标识符一样-指定应该激活哪个链接。你看到标签需要在哪里独特?我在苹果的文档中找不到