在SwiftUI中,只要导航栏被隐藏,滑动返回手势也会被禁用。
有没有办法在SwiftUI中隐藏导航栏的同时保留向后滑动的手势?我已经有了一个自定义的“后退”按钮,但仍然需要这个手势。
我见过一些UIKit的解决方案,但仍然不知道如何在SwiftUI中实现
下面是代码来试试自己:
import SwiftUI
struct RootView: View {
var body: some View {
NavigationView {
NavigationLink(destination: SecondView()) {
Text("Go to second view")
}
}
}
}
struct SecondView: View {
var body: some View{
Text("As you can see, swipe to go back will not work")
.navigationBarTitle("")
.navigationBarHidden(true)
}
}
如有任何建议或解决方案,我们将不胜感激
5条答案
按热度按时间xmq68pz91#
只需扩展
UINavigationController
就可以了。mqkwyuun2#
这甚至比尼克·贝鲁奇的回答更简单。下面是最简单的工作解决方案:
vmdwslir3#
使用UINavigationController扩展时,您可能会遇到一个错误,即在您开始滑动屏幕并在不返回的情况下放开屏幕后阻止导航。将
.navigationViewStyle(StackNavigationViewStyle())
添加到NavigationView确实可以修复此问题。如果您需要基于设备的不同视图样式,此扩展可帮助您:
f2uvfpb94#
我查阅了关于这个问题的文档和其他来源,没有发现任何问题。只有几个解决方案,基于使用
UIKit
和UIViewControllerRepresentable
。我尝试合并解决方案from this question,我保存了向后滑动手势,即使用其他视图替换了后退按钮。代码仍然有点脏,但我认为这是进一步研究的起点(例如,完全隐藏导航栏)。下面是ContentView
的外观:下面是
SwipeBackNavController
和SwipeBackNavigationLink
的实现,它们模拟了NavigationView
和NavigationLink
,它们只是SwipeNavigationController
工作的 Package 器,最后一个是UINavigationController
的子类,可以根据需要定制:这个实现现在提供了保存自定义后退按钮和向后滑动手势。我仍然不喜欢一些时刻,像
SwipeBackNavigationLink
如何推视图,所以稍后我会尝试继续研究。aydmsdu95#
采用@Nick Bellucci解决方案,但并非适用于所有屏幕,
创建AppState类
添加nick的扩展名(已修改)
你的观点