Ios 当键盘出现在iPhone X中时,向上移动屏幕

Ios 当键盘出现在iPhone X中时,向上移动屏幕,ios,swift,uikeyboard,Ios,Swift,Uikeyboard,当键盘显示和隐藏时,我使用下面的代码上下移动屏幕 override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector:#selector(ViewController.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil

当键盘显示和隐藏时,我使用下面的代码上下移动屏幕

override func viewDidLoad() {
    super.viewDidLoad()            
    NotificationCenter.default.addObserver(self, selector:#selector(ViewController.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)    
}

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

@objc func keyboardWillHide(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if self.view.frame.origin.y != 0{
            self.view.frame.origin.y += keyboardSize.height
        }
    }
}
它适用于除iPhoneX以外的所有设备,我认为问题在于iPhoneX底部浪费了空间

问题是,键盘大小在显示之前和之后都会发生变化,导致视图不断下降


可以帮助吗?< /p> < p>使用uiKiBODFrimeBuffer-IoFooKE代替UKIKBOADFraseBuffer-EndoFiKEY。< /P> < P>使用UIKEKBOADFrimeUntudioIfOKEY而不是UIKEBOBOADFraseBuffuSeriFiKEY。

< P>您还应该考虑安全区域插入< /P>
let endFrame = (userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue ?? CGRect.zero
let bottomSpace = keyboardValues.endFrame.maxY - keyboardValues.endFrame.minY - self.view.safeAreaInsets.bottom

你不应该是加法。这些通知可能会发布多次。使用绝对值。

你也应该考虑安全区域插入< /P>

let endFrame = (userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue ?? CGRect.zero
let bottomSpace = keyboardValues.endFrame.maxY - keyboardValues.endFrame.minY - self.view.safeAreaInsets.bottom
你不应该是加法。这些通知可能会发布多次。使用绝对值。

在这里, 使用IQKeyboardManagerSwift

AppDelegate.swift设置

IQKeyboardManager.shared.enable = true
IQKeyboardManager.shared.enableAutoToolbar = false
在我的ViewController中

func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
    print(#function)
    if DeviceType.checkiPhoneX() {
        IQKeyboardManager.shared.keyboardDistanceFromTextField = 40.0
    }        
    return true
}

 func textViewDidEndEditing(_ textView: UITextView) {
    if DeviceType.checkiPhoneX() {
        IQKeyboardManager.shared.keyboardDistanceFromTextField = 0.0
    }
}
这就是我管理X键盘的方式

希望这能对你有所帮助。

在这里, 使用IQKeyboardManagerSwift

AppDelegate.swift设置

IQKeyboardManager.shared.enable = true
IQKeyboardManager.shared.enableAutoToolbar = false
在我的ViewController中

func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
    print(#function)
    if DeviceType.checkiPhoneX() {
        IQKeyboardManager.shared.keyboardDistanceFromTextField = 40.0
    }        
    return true
}

 func textViewDidEndEditing(_ textView: UITextView) {
    if DeviceType.checkiPhoneX() {
        IQKeyboardManager.shared.keyboardDistanceFromTextField = 0.0
    }
}
这就是我管理X键盘的方式


希望这能对您有所帮助。

我遇到的问题与我最终使用iqKeyboardmanager和设置inputfield和键盘之间的距离40的问题相同。哇,又是您@PratikPrakapati:我能看看您的代码吗?我遇到的问题与我最终使用iqKeyboardmanager和设置inputfield和键盘之间的距离40的问题相同。哇,又是您吗@PratikPrajapati:我能看看你的代码吗?不需要外部库就可以轻松地处理键盘。是的,绝对可以。我只是按照他的要求显示我的试用代码。不需要外部库就可以轻松地处理键盘。是的,绝对可以,我只是按照他的要求显示我的试用代码