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

屏幕旋转后Sheet中NavigationView/NavigationStack返回按钮错位问题问询

SwiftUI:Sheet内导航返回按钮横竖屏切换后偏移问题

设备从竖屏切换至横屏再切回竖屏后,Sheet内的NavigationView或NavigationStack中的返回按钮会向内偏移,无法回到初始位置。已通过Apple Feedback Assistant提交该问题,推测其他开发者也可能遇到相同情况。

复现代码

import SwiftUI

struct ContentView: View {
    @State private var sheetViewIsPresented: Bool = false
    
    var body: some View {
        Button("Present Sheet") {
            sheetViewIsPresented.toggle()
        }
        .sheet(isPresented: $sheetViewIsPresented) {
            SheetView()
        }
    }
}

struct SheetView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: DetailView()) {
                Text("Navigate")
            }
        }
    }
}

struct DetailView: View {
    var body: some View {
        Text("Detail View")
    }
}

临时解决方案

目前可以通过以下方式规避该系统布局bug:

  • 自定义返回按钮:完全替代系统默认按钮,手动控制布局位置
struct DetailView: View {
    @Environment(\.dismiss) private var dismiss
    
    var body: some View {
        Text("Detail View")
            .navigationBarBackButtonHidden(true)
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading) {
                    Button(action: { dismiss() }) {
                        HStack {
                            Image(systemName: "chevron.left")
                            Text("Back")
                        }
                    }
                }
            }
    }
}
  • 旋转时强制刷新视图:监听设备旋转事件,通过动态ID触发导航视图重建
struct SheetView: View {
    @State private var rotationRefreshTrigger = false
    
    var body: some View {
        NavigationView {
            NavigationLink(destination: DetailView()) {
                Text("Navigate")
            }
        }
        .onChange(of: UIDevice.current.orientation) { _ in
            rotationRefreshTrigger.toggle()
        }
        .id(rotationRefreshTrigger)
    }
}

内容的提问来源于stack exchange,提问作者Simon Bogutzky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:32:05