横屏状态下无法关闭SwiftUI的.sheet视图,求技术解决方案
SwiftUI横屏状态下Sheet无法滑动关闭的解决方案
针对你在iOS 16.4、Xcode 14.3.1中遇到的横屏Sheet无法滑动关闭的问题,有以下几种可行的解决方式:
1. 明确设置Sheet的Presentation Detents
在iOS 16+中,Sheet的滑动关闭依赖于明确的显示高度档位。横屏状态下如果未指定,系统可能无法正确识别滑动手势区域。添加presentationDetents即可修复:
import SwiftUI struct ContentView: View { @State var sheet = false var body: some View { VStack { Button("Open da sheeeet") { sheet = true } } .sheet(isPresented: $sheet) { Text("you are stuck now ahahahhahah\n(if youre in landscape)") .presentationDetents([.medium, .large]) // 指定可切换的高度档位 } } }
2. 添加手动关闭按钮作为兜底
即使滑动手势恢复,也可以在Sheet内部添加一个手动关闭按钮,确保用户在任何场景下都能关闭Sheet:
import SwiftUI struct ContentView: View { @State var sheet = false var body: some View { VStack { Button("Open da sheeeet") { sheet = true } } .sheet(isPresented: $sheet) { VStack(spacing: 20) { Text("you are stuck now ahahahhahah\n(if youre in landscape)") Button("Close Sheet") { sheet = false } .buttonStyle(.borderedProminent) } .padding() .presentationDetents([.medium]) } } }
问题原因说明
在iPhone横屏的紧凑尺寸环境下,iOS 16.4的Sheet默认配置未正确启用滑动关闭的手势识别范围,通过指定presentationDetents,可以让系统明确Sheet的可交互区域,从而恢复滑动关闭功能。
内容的提问来源于stack exchange,提问作者oosh
相关产品推荐
相关产品推荐

