屏幕旋转后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
相关产品推荐
相关产品推荐

