该延迟代码下面的代码在iOS 14.0以下运行良好,但在iOS 14.0模拟器中,它每2秒重复调用一次。有什么我错过的吗?
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Change `2.0` to the desired number of seconds.
// Code you want to be delayed
}这里我添加了完整的代码:
struct ContentView: View {
@State var show = false
var body: some View {
NavigationView{
VStack{
NavigationLink(destination: Text("New View"), isActive: $show, label: {
Image("main_logo").renderingMode(.original).frame(width: 100, height: 100)
})
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
self.show.toggle()
}
}
} .navigationBarHidden(true)
.navigationBarTitle(Text("Home"))
.edgesIgnoringSafeArea([.top, .bottom])
}.preferredColorScheme(.dark) // white tint on status bar
}
}我从这里调用New在2秒后,新视图在2秒后被取消,然后返回到上面的视图,它重复。
这就是我在控制台输出中得到的
[UIContextMenuInteraction] Attempting -[UIContextMenuInteraction dismissMenu], when not in an active state. This is a client error most often caused by calling dismiss more than once during a given lifecycle. (<_UIVariableGestureContextMenuInteraction: 0x60000121a920>)我正在使用 Mac Big Sur Beta和Xcode 12 Beta
发布于 2020-07-05 06:36:37
在……里面
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
self.show.toggle() // << this !!
}
}。。self.show.toggle()使body重建和NavigationLink重新创建(因为它依赖于show,因此.onAppear再次调用(因为它是新链接),您可以看到-逐个循环。
所以DispatchQueue.main.asyncAfter没有什么问题。
可能您打算将该.onAppear修饰符附加到根视图,即。可能是NavigationView。
更新:下面测试的是在Xcode 12 / iOS 14上运行的
struct ContentView: View {
@State var show = false
var body: some View {
NavigationView{
VStack{
NavigationLink(destination: Text("New View"), isActive: $show, label: {
Image("main_logo").renderingMode(.original).frame(width: 100, height: 100)
})
} .navigationBarHidden(true)
.navigationBarTitle(Text("Home"))
.edgesIgnoringSafeArea([.top, .bottom])
}.preferredColorScheme(.dark) // white tint on status bar
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
self.show.toggle()
}
}
}
}https://stackoverflow.com/questions/62737252
复制相似问题