键盘打开时如何避免应用缩放?

Posted

技术标签:

【中文标题】键盘打开时如何避免应用缩放?【英文标题】:How do I avoid app zoom when keyboard opens? 【发布时间】:2021-06-22 00:19:53 【问题描述】:

当我单击我的 SwiftUI 文本字段并打开键盘时,应用程序会缩小(显示在 video 中)。

我对此行为有两个疑问:

    为什么会这样? 如何避免这种情况发生?

这是我的代码:

struct BestillView: View  // This view is put inside a tab view with .ignoresSafeArea
    @State var navn = ""
    @State var varsling = true
    
    var body: some View 
        NavigationView 

            ZStack 

                Color("BackgroundColor")
                    .ignoresSafeArea()
                VStack 
                    Image("Liquid") // This is my image overlayed on the background, i suspect this may be the only element that actually gets zoomed out
                        .resizable()
                        .aspectRatio(contentMode: .fit)
                        .ignoresSafeArea()
                    Spacer()
                
                

                VStack 
                    ZStack(alignment: .leading)  // This is where the text field i'm having trouble with is
                        Color("UnselectedColor")
                            .frame(height: 50)
                            .cornerRadius(20.0)
                        if navn.isEmpty  // I have a separate text element as the placeholder text so i can give it a custom color
                            Text("Navn")
                                .foregroundColor(Color("AccentColor"))
                                .padding()
                        
                        TextField("", text: $navn)
                            .padding()
                    
                    .frame(width: 300)
                    


                    Spacer()
                        .frame(height: 20.0)
                    
                    // I removed the rest of my code, I don't think it should be necessary in this question - it's only a NavigationLink and a Toggle
                
            
        
    


【问题讨论】:

【参考方案1】:

您的 Image 上有 .ignoresSafeArea(),但实际上在包含该 Image 的 VStack 上需要它。 VStack 正在缩小以适应键盘的安全区域,这也会挤压图像。

【讨论】:

很好的建议,但不幸的是这不起作用。 我的小疏忽,这确实有效,但我需要在 所有 父视图上使用.ignoresSafeArea(),而不仅仅是 VStack。【参考方案2】:

视图实际上并没有缩小;图像正在缩小 - 因为随着视图向上移动,它的高度越来越小。

您可以将代码更新为:

Image("Liquid")
    .aspectRatio(contentMode: .fill)

它会保持大小不变​​ - 因为宽度将保持不变。

【讨论】:

这弄乱了图像的显示方式。 contentMode: .fit 看起来应该是这样,但 contentMode: .fill 不是。 我明白了。我认为最好自己先看一下图像。但是,您也可以在图像上尝试.ignoresSafeArea(.keyboard, edges: .bottom) 吗? @马丁 我已修复,请参阅标记为已解决的答案 :)

以上是关于键盘打开时如何避免应用缩放?的主要内容,如果未能解决你的问题,请参考以下文章

移动网络 - 如何在键盘打开时获取屏幕高度

底部对话框打开时如何防止键盘关闭?

在 Nexus Player、Android Cordova 应用程序上打开时输入第一个字符的虚拟键盘

如何在键盘打开时隐藏浮动按钮(Android/iOS)?

在键盘打开时将项目添加到 RecyclerView 时向下滚动

iOS webview自动对焦在键盘打开时不起作用