如何在SwiftUI中禁用向后滑动手势?只能使用后退按钮关闭子视图。
答案 0 :(得分:2)
通过隐藏导航栏中的后退按钮,可以禁止向后滑动手势。您可以使用.navigationBarItems()
struct ContentView: View {
var body: some View {
NavigationView{
List{
NavigationLink(destination: Text("You can swipe back")){
Text("Child 1")
}
NavigationLink(destination: ChildView()){
Text("Child 2")
}
}
}
}
}
struct ChildView: View{
@Environment(\.presentationMode) var presentationMode
var body:some View{
Text("You cannot swipe back")
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading: Button("Back"){self.presentationMode.wrappedValue.dismiss()})
}
}
答案 1 :(得分:1)
This answer显示了如何在SwiftUI中配置导航控制器(简而言之,使用UIViewControllerRepresentable
获得对UINavigationController
的访问权限)。 this answer显示了如何禁用滑动手势。结合它们,我们可以做类似的事情:
Text("Hello")
.background(NavigationConfigurator { nc in
nc.interactivePopGestureRecognizer?.isEnabled = false
})
这样,您可以继续使用内置的后退按钮功能。
答案 2 :(得分:0)
以下内容将复制现有的iOS人字形图像。 为接受的答案。 就是将 “后背” 替换为图像 雪佛龙 。
.navigationBarItems(leading: Button("Back"){self.presentationMode.wrappedValue.dismiss()})
使用
Button(action: {self.presentationMode.wrappedValue.dismiss()}){Image(systemName: "chevron.left").foregroundColor(Color.blue).font(Font.system(size:23, design: .serif)).padding(.leading,-6)}
答案 3 :(得分:0)
我使用Introspect库,然后我就这样做:
import SwiftUI
import Introspect
struct ContentView: View {
var body: some View {
Text("A view that cannot be swiped back")
.introspectNavigationController { navigationController in
navigationController.interactivePopGestureRecognizer?.isEnabled = false
}
}
}
答案 4 :(得分:0)
设置 navigationBarBackButtonHidden
后,将 navigationTitle
设置为 true 会丢失漂亮的动画。
所以我尝试了另一个答案
navigationController.interactivePopGestureRecognizer?.isEnabled = false
但这对我不起作用。
尝试以下代码后工作正常
NavigationLink(destination: CustomView()).introspectNavigationController {navController in
navController.view.gestureRecognizers = []
}