如何使用键盘移动 UI TextField 以避免阻塞 [SWIFT 5+ ]

How to move UITextFeild with keyboard in order to avoid blocking [SWIFT 5+ ]

我知道有几个关于此主题的问题,但我无法在 [SWIFT 5.0] 或更高版本上找到任何问题,非常感谢您的帮助。

我在屏幕底部有一个 UITextFeild,每次用户单击它时它都会隐藏。最近有没有一种方法可以解决这个隐藏问题,方法是将键盘后面的 textFeild 移到顶部,或者在键盘顶部显示一个示例字段。任何帮助将不胜感激,谢谢!

您可以使用以下代码:

首先,在您的控制器 viewDidLoad() 方法中添加这两行代码:

NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)

其次,将这两个方法添加到您的控制器中:

@objc func keyboardWillShow(notification: NSNotification) {
  
    if yourTextfield.isEditing == true
    {
        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            self.view.frame.origin.y -= keyboardSize.height
        }
    }
}

@objc func keyboardWillHide(notification: NSNotification) {
    if self.view.frame.origin.y != 0 {
        self.view.frame.origin.y = 64
    }
}

享受 :).

如果您使用 AutoLayout,您可以尝试使用我的 collection 方便的 Swift 扩展中的 KeyboardKeyboardLayoutGuide 以及名为 SwiftToolkit 的 类

将此代码添加到您的控制器 viewDidLoad() 方法:

let keyboardGuide = KeyboardLayoutGuide()
view.addLayoutGuide(keyboardGuide)

/** 
    Your textField vertical position constraint 
    must have lower priority than this constraint
*/
keyboardGuide.topAnchor.constraint(greaterThanOrEqualTo: textField.bottomAnchor, constant: 8).isActive = true

当键盘出现时,它会将您的 UITextField 向上推: