当模态显示键盘时,SwiftUI 会挤压父 View

标签 swift swiftui ios14

在使用 SwiftUI 时,我注意到一个非常不寻常的行为。在 iOS 14 上,当在模态屏幕上显示键盘时,父 View 也会被挤压。为了说明我的意思,我制作了一个简短的演示 View 和一个显示问题的简短 gif。你可以发现here .

struct SqueezTestView: View {
    @State var isModalPresented = false
    @State var text = ""
    @State var colors: [Color] = [.red, .green, .blue, .orange, .pink, .purple, .yellow]

    var body: some View {
        NavigationView {
            VStack {
                ForEach(0..<colors.count) { index in
                    colors[index]
                        .animation(.linear(duration: 1))
                }
            }
            .navigationBarTitle("Squeez")
            .navigationBarItems(leading: Button("Shuffel") { colors.shuffle() }, trailing: Button("Modal") { isModalPresented = true })
            .sheet(isPresented: $isModalPresented) {
                NavigationView {
                    VStack {
                        TextField("Test", text: $text, onCommit: {isModalPresented = false})
                            .padding()
                        Spacer()
                    }
                    .navigationBarTitle("Modal", displayMode: .inline)
                    .navigationBarItems(trailing: Button("Done") { isModalPresented = false })
                }
            }
        }
    }
}

我预计只有模态视图会被挤压,而父 View 保持不变。在这种情况下,每次我在键盘可见时关闭模式时,父 View 都会动画化。有什么我错过的或者这个问题有任何已知的修复吗?

最佳答案

我找到了问题的解决方案here 。关键是设置

.ignoresSafeArea(.keyboard, edges: .bottom)

在父 View 上。

关于当模态显示键盘时,SwiftUI 会挤压父 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63951647/

相关文章:

ios - SwiftUI - 如何使用 Shape 制作垂直虚线?

swift - 如何创建一个受限于结构的泛型类?

ios - 准备(用于segue :) not being called on segue?

iOS SwiftUI 为列表而不是单元格设置背景图像

用于自定义 View 的 SwiftUI ViewModifier

swift - WidgetKit getCurrentConfigurations 返回错误的 WidgetKit 配置列表

ios - SwiftUI 中默认展开的 List 或 OutlineGroup

ios - 为什么 NSMutableData 改变指针的地址?

ios - 如何从 API 访问文本响应。 swift ?

xcode - 无法在 swiftui 中将类型 '()' 的值转换为预期参数类型 '(() -> Void)?'