SwiftUI在iOS上NavigationBar标题重影问题复现

原创
2021/05/05 15:25
阅读数 680
AI总结

最近在用SwiftUI写一个APP,偶发性出现一个标题栏重影的BUG,就像这样:

image.png

问题分析:

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")
            }))
        
    }
}

目前查阅了很多资料,没有得到一个合理的解决方案,欢迎有碰到过这个问题的大哥交流交流。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
AI总结
返回顶部
顶部