繁体   English   中英

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

[英]Move screen up when keyboard appears in iPhone X

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

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
        }
    }
}

它适用于除iPhone x之外的所有设备(我认为问题是iPhone X底部浪费了空间)

问题是键盘大小在显示之前和之后都会改变,并导致视图上下移动...

有人可以帮忙吗?

您还应该考虑安全区域插图

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键盘的方式。

希望这对您有帮助。

使用UIKeyboardFrameEndUserInfoKey代替UIKeyboardFrameBeginUserInfoKey。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM