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

iOS16中键盘激活时拖拽关闭Bottom Sheet出现视图裁剪问题求助

iOS16 Bottom Sheet键盘激活时拖拽关闭出现异常裁剪问题

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

  • 键盘未激活时(预期表现):
    When keyboard is not active

  • 键盘激活时(异常表现,注意Sheet边缘):
    When keyboard is active

我试过更换视图展示方式,包括用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,可通过以下方式修复:

  1. 移除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)
    }
    
  2. 按需指定忽略安全区的边缘
    若确实需要忽略部分安全区,可明确指定边缘,避免影响键盘交互逻辑:

    .ignoresSafeArea(edges: [.top, .leading, .trailing])
    

内容的提问来源于stack exchange,提问作者Shubham Vyas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:00:51