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

最近在用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")

}))

}

}

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

回答:

问题已复现。

解决方法:指定 navigationViewStyle

NavigationView{

NavigationLink(

destination: SubView(),

label: {

Text("去下一页")

})

.navigationBarTitle(Text("Main View"),displayMode: .inline)

}.navigationViewStyle(StackNavigationViewStyle())

以上是 SwiftUI在iOS上NavigationBar标题重影问题复现 的全部内容, 来源链接: utcz.com/p/185506.html

回到顶部