You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:01:03