【问题标题】:Extra space on WKWebView when keyboard is opened打开键盘时 WKWebView 上的额外空间
【发布时间】:2022-06-12 15:14:01
【问题描述】:

我在打开键盘时调整 webview 的大小。我像这样为 webview 添加了一些调试样式

self.webViewController.view.layer.borderWidth = 5
self.webViewController.view.layer.borderColor = UIColor.green.cgColor
self.webViewController.view.backgroundColor = UIColor.blue

此处的示例:https://github.com/zecar/ios-app-clone

这是我打开键盘后得到的 调整大小似乎工作正常,我在 webview 周围有绿色边框,这很好。问题是显示的蓝色背景,它的高度似乎与键盘完全相同。

这就是我调整大小的方式

self.keyboardOpenedFrame = CGRect(x: 0, y: 0.5, width: self.view.frame.width, height: self.originalFrame.height - kbSize)
self.view.frame = self.keyboardOpenedFrame

您在顶部看到的 HTML 元素是具有固定位置和 100% 高度 100% 宽度的全屏元素,所以我猜 HTML 页面内没有添加蓝色边距。

有什么想法吗?

//编辑:添加webview结构

struct WebView: View {
    typealias UIViewControllerType = UIViewController
    
    var body: some View {
        if #available(iOS 14.0, *) {
            WebViewRepresentable().edgesIgnoringSafeArea(.all).ignoresSafeArea(edges: .bottom)
        } else {
            // Fallback on earlier versions
            WebViewRepresentable().edgesIgnoringSafeArea(.all)
        }
    }
    
    struct WebViewRepresentable: UIViewControllerRepresentable {
        
        func makeUIViewController(context: UIViewControllerRepresentableContext<WebView.WebViewRepresentable>) -> UIViewController {

            return WebViewController()
        }

        func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<WebView.WebViewRepresentable>) {
        }
    }
}

【问题讨论】:

  • 你使用的是 UIViewRepresentable( SwiftUI ) 还是 UIKit ?
  • UIViewRepresentable 是
  • 你试过这个 .ignoresSafeArea(.keyboard, edges: .bottom)
  • @Yodagama 我有 WebViewRepresentable().edgesIgnoringSafeArea(.all)
  • 需要最小的可重现示例。

标签: swift swiftui


【解决方案1】:

不需要手动计算键盘框架,因为它是由约束处理的,用键盘显示文本字段,所以只需注释

//        self.keyboardOpenedFrame = CGRect(x: 0, y: 0.5, width: self.view.frame.width, height: self.originalFrame.height - kbSize)
        
//        print("[LOG] SETTING FRAME \(self.keyboardOpenedFrame)")
//        self.view.frame = self.keyboardOpenedFrame

结果行为正确(此处不应更改框架 - 键盘偏移在内部处理,显示 TextField 的正确相对位置)

使用 Xcode 13.4 / iOS 15.5 测试

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 1970-01-01
    • 2023-02-26
    • 2018-07-15
    • 2015-12-01
    • 1970-01-01
    • 2015-02-26
    • 2021-10-24
    • 2016-12-17
    相关资源
    最近更新 更多