Chúng ta có một vấn đề như thế này: nếu Text Field ở gần phía đấy màn hình, khi keyboard được bật lên nó sẽ che mốt ô text cần nhập. Chúng ta sẽ cần xử lý để đẩy ô Text Field lên phía trên của Key board
Chúng ta sẽ phải lắng nghe sự kiện ẩn, hiện của keyboard
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: .UIKeyboardWillHide, object: nil)
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
guard let globalPoint = textField.superview?.convert(textField.frame.origin, to: nil) else {
return
}
if globalPoint.y + 50 > heightScreen - keyboardSize.height {
distanceConstraint.constant = CGFloat(keyboardSize.height - (heightScreen - globalPoint.y) + 50)
}
}
}
@objc func keyboardWillHide(notification: NSNotification) {
if distanceConstraint.constant > 0 {
distanceConstraint.constant = CGFloat(0)
}
}
textField : Text Field cuối cùng
textField.superview?.convert : là câu lệnh để quy đổi tới hệ toạ độ trên màn hình
50 : là chiều cao của Text Field 40dp công thêm một khoảng 10dp
Chúng ta sẽ phải lắng nghe sự kiện ẩn, hiện của keyboard
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: .UIKeyboardWillHide, object: nil)
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
guard let globalPoint = textField.superview?.convert(textField.frame.origin, to: nil) else {
return
}
if globalPoint.y + 50 > heightScreen - keyboardSize.height {
distanceConstraint.constant = CGFloat(keyboardSize.height - (heightScreen - globalPoint.y) + 50)
}
}
}
@objc func keyboardWillHide(notification: NSNotification) {
if distanceConstraint.constant > 0 {
distanceConstraint.constant = CGFloat(0)
}
}
textField : Text Field cuối cùng
textField.superview?.convert : là câu lệnh để quy đổi tới hệ toạ độ trên màn hình
50 : là chiều cao của Text Field 40dp công thêm một khoảng 10dp
Comments
Post a Comment