躲藏NavigationBarBackButton时,完成右滑封闭页面
导言:现在的大多数iOS App都有右滑封闭页面的功能,众多iPhone用户也都习惯了这种操作
当运用体系自带的NavigationBarBackButton时能够很轻松完成这个功能,但体系自带的BackButton通常会带上个页面的Title,并且需求通常需要自定义NavigationBar,就需要躲藏体系自带的回来摁钮,这时右滑回来的功能也消失了,这非常头疼
1.先看运用体系回来摁钮时操作
代码:
import SwiftUI
//父页面
struct IndexView: View {
var body: some View {
NavigationView{
VStack {
NavigationLink {
ChildView()
} label: {
Text("jump to ChileView")
}
}
.navigationBarTitle("主页", displayMode: .inline)
}
}
}
//子页面
struct ChildView: View {
var body: some View {
VStack {
Text("ChildView")
}
.navigationBarTitle("子页面", displayMode: .inline)
}
}
ps:能够发现子页面的回来摁钮会显示父页面的title,这通常是不符合页面UI的需求,但此时是能够满意右滑跳转的
2.当躲藏掉回来Button时操作
代码:
import SwiftUI
//父页面
struct IndexView: View {
var body: some View {
NavigationView{
VStack {
NavigationLink {
ChildView()
} label: {
Text("jump to ChileView")
}
}
.navigationBarTitle("主页", displayMode: .inline)
}
}
}
//子页面
struct ChildView: View {
@Environment(.presentationMode) var presentionation //点了确认后 让本页面封闭消失的变量
var body: some View {
VStack {
Text("ChildView")
}
.navigationBarTitle("子页面", displayMode: .inline)
.navigationBarBackButtonHidden(true)
.navigationBarItems(
leading:
Button(action: {
self.presentionation.wrappedValue.dismiss()
}, label: {
Image(systemName: "chevron.left")
.foregroundColor(Color.black)
})
)
}
}
ps:这时咱们能够满意UI的需求和规划,可是右滑回来的功能跟着BackButton一起躲藏掉了,这时功能就出现了缺失
3.这时候只需要给UINavigationController添加额外的署理和办法即可完成
新增署理代码:
import SwiftUI
//右滑回来
extension UINavigationController: UIGestureRecognizerDelegate {
override open func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return viewControllers.count > 1
}
}
原代码不变:
import SwiftUI
//父页面
struct IndexView: View {
var body: some View {
NavigationView{
VStack {
NavigationLink {
ChildView()
} label: {
Text("jump to ChileView")
}
}
.navigationBarTitle("主页", displayMode: .inline)
}
}
}
//子页面
struct ChildView: View {
@Environment(.presentationMode) var presentionation //点了确认后 让本页面封闭消失的变量
var body: some View {
VStack {
Text("ChildView")
}
.navigationBarTitle("子页面", displayMode: .inline)
.navigationBarBackButtonHidden(true)
.navigationBarItems(
leading:
Button(action: {
self.presentionation.wrappedValue.dismiss()
}, label: {
Image(systemName: "chevron.left")
.foregroundColor(Color.black)
})
)
}
}
添加上这个extension后UINavigationControl就能够完成右滑回来,回来经过NavigationLink跳转到当前页面的上一个页面(fullScreenCover无法跳转回来),所以添加上这个署理就能够完成右滑回来并且能够满意UI页面规划
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。


