SwiftUI实现按钮点击切换页面且禁止返回的方案
SwiftUI实现无返回的页面跳转
需求说明
点击按钮后从当前导航页面切换至新页面,且新页面左上角无返回按钮,无法回到上一页。
修改后的完整代码
import SwiftUI // 第一个页面:初始页面 struct acquaintance1: View { // iOS16+ 使用NavigationStack的路径控制导航栈 @State private var path = NavigationPath() var body: some View { NavigationStack(path: $path) { ZStack { Button(action: { // 触发震动反馈 let impactMed = UIImpactFeedbackGenerator(style: .heavy) impactMed.impactOccurred() // 跳转到View1_1 path.append("view1_1") }) { Image("scren1") .resizable() .overlay(alignment: .bottomTrailing) { Image(systemName: "arrow.right.square.fill") .font(.system(size: 50)) .foregroundColor(Color(.systemOrange)) .padding() // 用padding替代固定坐标,适配不同屏幕 } } .navigationDestination(for: String.self) { value in if value == "view1_1" { View1_1() } } // 初始页面隐藏导航栏(按需启用) .navigationBarHidden(true) } } } } // 第二个页面 struct View1_1: View { @State private var showNext = false var body: some View { VStack { Button("Переход на View1_2") { showNext = true } } .navigationTitle("View1_1") // 隐藏返回按钮,同时禁用系统滑动返回手势 .navigationBarBackButtonHidden(true) .navigationDestination(isPresented: $showNext) { View1_2() // 目标页面同样隐藏返回按钮 .navigationBarBackButtonHidden(true) } } } // 第三个页面:最后一页 struct View1_2: View { var body: some View { Text("Последний экран") .navigationTitle("最后一页") } } struct ContentView_Previews: PreviewProvider { static var previews: some View { acquaintance1() } }
关键实现要点
- 导航容器选择:iOS16及以上推荐使用
NavigationStack配合NavigationPath管理导航栈,逻辑更清晰;兼容iOS15及以下可改用NavigationView配合@State var isActive = false的NavigationLink。 - 禁用返回功能:在目标页面添加
.navigationBarBackButtonHidden(true),系统会自动禁用iOS原生的滑动返回手势,确保无法回到上一页。 - 屏幕适配优化:将原代码中固定坐标的按钮布局,替换为基于
alignment和padding的相对布局,避免在不同尺寸设备上出现偏移。 - 跳转逻辑保留:保留了原代码的震动反馈逻辑,同时通过导航栈状态变量触发页面跳转。
内容的提问来源于stack exchange,提问作者Nick Vek
相关产品推荐
相关产品推荐

