【发布时间】:2021-12-16 10:01:21
【问题描述】:
我正在做一个有自定义导航栏的项目,这意味着我需要自己管理后退按钮和滑动后退手势。过去我没有遇到任何问题,但是现在当我尝试向后滑动并停止在手势中间(半滑动)时,屏幕显示顶部空白,好像导航栏显示没有标题(如果按下自定义后退按钮或手势完成,即完全滑动,则不会出现此问题。
在出现空白后尝试向后滑动时也会显示错误:changing items while animating can result in a corrupted navigation bar。
奇怪的是,问题只发生在 NavigationView 的第三个屏幕上。
我附上了一个展示问题的视频,显示半滑动 SecondView 不会产生任何顶部空间,但半滑动 ThirdView 会。
代码如下:
import SwiftUI
// https://stackoverflow.com/questions/59921239/hide-navigation-bar-without-losing-swipe-back-gesture-in-swiftui
extension UINavigationController {
override open func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = nil
}
}
struct ContentView: View {
init() {
print("ContentView")
}
var body: some View {
NavigationView {
NavigationLink(destination: SecondView()) {
Text("Go to second view")
}
.navigationBarTitle("")
.navigationBarHidden(true)
.navigationBarBackButtonHidden(true)
}
}
}
struct SecondView: View {
init() {
print("SecondView")
}
var body: some View {
VStack {
Text("Second view")
VStack {
NavigationLink(destination: ThirdView()) {
Text("Go to third view")
}
}
.padding(.horizontal, 20)
.padding(.top, 20)
Spacer()
}
.navigationBarTitle("")
.navigationBarHidden(true)
.navigationBarBackButtonHidden(true)
}
}
struct ThirdView: View {
init() {
print("ThirdView")
}
var body: some View {
VStack {
Text("Third view")
Spacer()
}
.navigationBarTitle("")
.navigationBarHidden(true)
.navigationBarBackButtonHidden(true)
}
}
编辑:这只能在使用 iOS 15 时重现,在 iOS 14.5 中一切正常
【问题讨论】:
-
.navigationBarTitle已弃用,请尝试将其替换为.navigationTitle。 -
@eXCore 感谢您提供的信息,我将替换它:) 不过,它并没有解决问题。
标签: swiftui swiftui-navigationlink swiftui-navigationview