ios15在隐藏导航栏时向后半滑动会留下顶部空白空间 - SwiftUI
Posted
技术标签:
【中文标题】ios15在隐藏导航栏时向后半滑动会留下顶部空白空间 - SwiftUI【英文标题】:ios15 half-swiping back while hiding the navigation bar leaves a top empty space - SwiftUI 【发布时间】:2021-12-16 10:01:21 【问题描述】:我正在做一个有自定义导航栏的项目,这意味着我需要自己管理后退按钮和滑动后退手势。过去我没有遇到任何问题,但是现在当我尝试向后滑动并停止在手势中间(半滑动)时,屏幕显示顶部空白,好像导航栏显示没有标题(如果按下自定义后退按钮或手势完成,即完全滑动,则不会出现此问题。
在出现空白后尝试向后滑动时也会显示错误:changing items while animating can result in a corrupted navigation bar
。
奇怪的是,问题只发生在 NavigationView 的第三个屏幕上。
我附上了一个展示问题的视频,显示半滑动 SecondView
不会产生任何顶部空间,但半滑动 ThirdView
会。
代码如下:
import SwiftUI
// https://***.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 感谢您提供的信息,我将替换它:) 不过,它并没有解决问题。
【参考方案1】:
这是一些奇怪的骇客,但我能够通过在 NavigationView
上使用 .navigationViewStyle(.stack)
来“修复”它。
如果你有兴趣,顺便说一句,空白是导航栏和大导航标题。调试这类东西的一个有用的东西是“调试视图层次结构”按钮。
这绝对是一个 hack,但你还是可以尝试向 Apple 提交错误报告。
【讨论】:
以上是关于ios15在隐藏导航栏时向后半滑动会留下顶部空白空间 - SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章