Я создаю гибридное приложение для iOS (WKWebView
/ HTML5
). Все работает отлично, пока я не открываю программную клавиатуру.
Когда программная клавиша открыта, пользователь может (каким-то образом) переместить полный вид за пределы визуальной области (включая заголовок и т. Д.). Когда программная клавиша закрыта, все перемещается назад ...
я уже пробовал
- разные подходы к созданию WKWebView
(раскадровка или программа)
- Я уменьшаю размер WKWebView, если клавиатура открывается
Всегда одинаковое поведение ...
override func viewDidLoad() {
....
ui_webView = WKWebView(frame: CGRect( x: 0, y: safeArea_top, width: view.frame.width, height: view.frame.height - safeArea_top-safeArea_bottom), configuration: webViewCfg )
ui_webView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]
ui_webView!.navigationDelegate = self
ui_webView!.uiDelegate = self
ui_webView!.scrollView.bounces = false
ui_webView!.contentMode = .scaleToFill
view.addSubview(ui_webView!)
if let result = components?.url {
let request = URLRequest(url: result)
ui_webView!.load(request)
}
}
показано управление клавиатурой
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardHeight = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.height {
var newFrame = ui_webView?.frame
newFrame?.size.height = view.frame.height-safeArea_top-safeArea_bottom-keyboardHeight
ui_webView?.frame = newFrame!
view.setNeedsLayout()
}
}
обработка клавиатуры закрыта
@objc func keyboardWillHide(notification: NSNotification) {
var newFrame = ui_webView?.frame
newFrame?.size.height = view.frame.height - safeArea_top-safeArea_bottom
ui_webView?.frame = newFrame!
view.setNeedsLayout()
}
Поскольку WKWebView
начинается с y=safeArea_top
, я подумал, что начало, если фиксировано / нет, не может быть перемещено.
Каким-то образом (просто идея): высота вида остается (если клавиатура открыта) и поэтому все можно перемещать вверх?!?
Есть идеи, в чем может быть проблема / как ее решить?