iOS16中键盘激活时拖拽关闭Bottom Sheet出现视图裁剪问题求助
iOS16 Bottom Sheet键盘激活时拖拽关闭出现异常裁剪问题
我用Bottom Sheet展示视图时,遇到一个iOS16特有的问题:键盘未激活时,向下拖拽关闭Sheet的表现完全正常;但键盘激活状态下拖拽关闭,Sheet边缘会出现异常裁剪。
键盘未激活时(预期表现):

键盘激活时(异常表现,注意Sheet边缘):

我试过更换视图展示方式,包括用SwiftUIX和iOS16原生的sheet修饰符,但都没找到问题根源,且这个问题只在iOS16中复现。相关代码如下:
struct ContentView: View { @State var presented: Bool = false var body: some View { Button("Show",action: { presented.toggle() }) .ignoresSafeArea() .sheet(isPresented: $presented) { view2 } } private var view2: some View { VStack(spacing: 0) { TextField(text: .constant("123")) .frame(height: 70) .background(.gray) .padding() TextField(text: .constant("456")) .frame(height: 70) .background(.gray) .padding() Spacer() } .ignoresSafeArea() .background(.black) } }
解决方案
这个问题是iOS16中Sheet与键盘交互的已知Bug,可通过以下方式修复:
移除Sheet内容的
ignoresSafeArea()
原代码中view2添加的.ignoresSafeArea()会导致Sheet在键盘弹出时的布局计算异常,移除后边缘裁剪问题即可消失:private var view2: some View { VStack(spacing: 0) { TextField(text: .constant("123")) .frame(height: 70) .background(.gray) .padding() TextField(text: .constant("456")) .frame(height: 70) .background(.gray) .padding() Spacer() } // 移除该行 .ignoresSafeArea() .background(.black) }按需指定忽略安全区的边缘
若确实需要忽略部分安全区,可明确指定边缘,避免影响键盘交互逻辑:.ignoresSafeArea(edges: [.top, .leading, .trailing])
内容的提问来源于stack exchange,提问作者Shubham Vyas
相关产品推荐
相关产品推荐

