最近在用SwiftUI写一个APP,偶发性出现一个标题栏重影的BUG,就像这样:
问题分析:
1. 从主页面导航到子页面,子页面动态读取了一个数组,ForEach渲染了一个列表。
2. 打开子页面瞬间 通过右滑关闭手势尝试关闭页面 但滑动一点后取消操作。
3. 再次通过右滑关闭子页面,此时,子页面的导航栏出现到了主页面上,产生重影。
4. 复现过程中,在列表渲染前左滑并取消,或者在列表渲染后左滑并取消,不会出现这个问题
复现源代码:
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView{
NavigationLink(
destination: SubView(),
label: {
Text("去下一页")
})
.navigationBarTitle(Text("Main View"),displayMode: .inline)
}
}
}
struct SubView:View {
@State var message: String = "左滑并保持不要返回\n等显示操作成功时瞬间松开取消\n重新左滑返回即可复现BUG"
@State var list: [String] = []
var body: some View{
VStack{
Text(message)
ForEach(0..<list.count){ index in
Text(list[index])
}
}
.onAppear(){
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
self.message = "操作成功,请左滑返回上一页"
self.list = [
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
"测试1",
]
}
}
.navigationBarTitle(Text("Sub View"),displayMode: .inline)
.navigationBarItems(
trailing: Button(action: {
self.message = "Right tapped!"
}, label: {
Text("Right")
}))
}
}
目前查阅了很多资料,没有得到一个合理的解决方案,欢迎有碰到过这个问题的大哥交流交流。