当用户单击 UIWebView 内的文本字段时,出现键盘后屏幕不会向上移动
Posted
技术标签:
【中文标题】当用户单击 UIWebView 内的文本字段时,出现键盘后屏幕不会向上移动【英文标题】:Screen not moving up after keyboard appears when user clicks on text field inside UIWebView 【发布时间】:2017-09-08 07:24:37 【问题描述】:我有一个 iPhone 应用程序 (Swift 3),其中内容从 CMS 动态加载登录。该表单包含用户需要输入和提交的字段,没有什么棘手的。
不幸的是,当用户点击登录字段时,键盘出现并且隐藏了包含表单的 UIWebView。
我该如何解决这个问题?Please Check Screenshot, click the form hiding my UIWebView Contents
【问题讨论】:
【参考方案1】:试试这个代码,它适用于 Swift 3。在这种情况下,我给出了 4 个文本字段
import UIKit
class ViewController: UIViewController, UITextFieldDelegate
@IBOutlet weak var textField4: UITextField!
@IBOutlet weak var textField3: UITextField!
@IBOutlet weak var textField2: UITextField!
@IBOutlet weak var textField1: UITextField!
override func viewWillDisappear(_ animated: Bool)
view.endEditing(true)
override func viewDidLoad()
super.viewDidLoad()
self.textField1.delegate = self
self.textField2.delegate = self
self.textField3.delegate = self
self.textField4.delegate = self
self.textField1.tag = 0
self.textField2.tag = 1
self.textField3.tag = 2
self.textField4.tag = 3
func textFieldShouldReturn(_ textField: UITextField) -> Bool
textField.resignFirstResponder()
return true
func textFieldDidBeginEditing(_ textField: UITextField)
switch textField.tag
case 0:
moveTextField(textField: textField, moveDistance: -120, up: true)
case 1:
moveTextField(textField: textField, moveDistance: -140, up: true)
case 2:
moveTextField(textField: textField, moveDistance: -160, up: true)
case 3:
moveTextField(textField: textField, moveDistance: -180, up: true)
default:
print("Do Nothing...!")
func textFieldDidEndEditing(_ textField: UITextField)
switch textField.tag
case 0:
moveTextField(textField: textField, moveDistance: -120, up: false)
case 1:
moveTextField(textField: textField, moveDistance: -140, up: false)
case 2:
moveTextField(textField: textField, moveDistance: -160, up: false)
case 3:
moveTextField(textField: textField, moveDistance: -180, up: false)
default:
print("Do Nothing...!")
func moveTextField(textField: UITextField, moveDistance: Int, up: Bool)
let moveDuration = 0.3
let movement: CGFloat = CGFloat(up ? moveDistance : -moveDistance)
UIView.beginAnimations("animateTextField", context: nil)
UIView.setAnimationBeginsFromCurrentState(true)
UIView.setAnimationDuration(moveDuration)
self.view.frame = (self.view.frame).offsetBy(dx: 0, dy: movement)
UIView.commitAnimations()
【讨论】:
抱歉 @Grecory Wilson Pullyattu 你不明白我的问题,我在我的 Webview 中使用 UIWebView 和 UITextField .....那么我该如何实现你的代码??? 您可以在其他任何地方添加您的 textField,并实现此代码。它会起作用的。但此代码仅适用于 4 个文本字段。您也可以通过添加更多案例来添加更多文本字段 我在 UIwebview 中的 UITextField 那么我该如何实现你的代码...为什么你不明白我的招聘... 你能给我看看你的故事板的viewController场景屏幕截图吗【参考方案2】:override func viewDidLoad()
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
func keyboardWillShow(notification: NSNotification)
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
self.view.frame.origin.y = -keyboardSize.height/2
func keyboardWillHide(notification: NSNotification)
if let _ = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
self.view.frame.origin.y = 0
【讨论】:
没有解决办法?我实现了你的代码,但仍然给我同样的问题 你确定等待会告诉你...但是我在哪里显示我的代码?? @AnkitKumawat 你可以在你的问题中添加你的代码......最好添加这样其他人可以看到你尝试了什么。 @Rahuld 没错,以上是关于当用户单击 UIWebView 内的文本字段时,出现键盘后屏幕不会向上移动的主要内容,如果未能解决你的问题,请参考以下文章