7 ответов:
В Swift:
вы можете получить высоту клавиатуры, подписавшись на
UIKeyboardWillShowNotificationуведомления. (Предполагая, что вы хотите знать, какова будет высота, прежде чем она будет показана).что-то вроде этого:
Swift 2
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)Swift 3
NotificationCenter.default.addObserver( self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil )Swift 4
NotificationCenter.default.addObserved( self, selector: #selector(keyboardWillShow) name: UIResponder.keyboardWillShowNotification, object: nil )тогда вы можете получить доступ к высоте в какой-то функции, как это:
Swift 2
func keyboardWillShow(notification:NSNotification) { let userInfo:NSDictionary = notification.userInfo! let keyboardFrame:NSValue = userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as! NSValue let keyboardRectangle = keyboardFrame.CGRectValue() let keyboardHeight = keyboardRectangle.height }Swift 3
@objc func keyboardWillShow(_ notification: Notification) { if let keyboardFrame: NSValue = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue { let keyboardRectangle = keyboardFrame.cgRectValue let keyboardHeight = keyboardRectangle.height } }Swift 4
@objc func keyboardWillShow(_ notification: Notification) { if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue { let keyboardRectangle = keyboardFrame.cgRectValue let keyboardHeight = keyboardRectangle.height }
Swift 3.0 и Swift 4.1
1-Регистрация уведомления в
viewWillAppearспособ:NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)2-Метод, который будет вызван:
@objc func keyboardWillShow(notification: NSNotification) { if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { let keyboardHeight = keyboardSize.height print(keyboardHeight) } }
Swift 4 и ограничения
к вашему tableview добавьте нижнее ограничение относительно нижней безопасной области. В моем случае ограничение называется tableViewBottomLayoutConstraint.
@IBOutlet weak var tableViewBottomLayoutConstraint: NSLayoutConstraint! override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(notification:)), name: .UIKeyboardWillShow, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear(notification:)), name: .UIKeyboardWillHide, object: nil) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow , object: nil) NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide , object: nil) } @objc func keyboardWillAppear(notification: NSNotification?) { guard let keyboardFrame = notification?.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue else { return } let keyboardHeight: CGFloat if #available(iOS 11.0, *) { keyboardHeight = keyboardFrame.cgRectValue.height - self.view.safeAreaInsets.bottom } else { keyboardHeight = keyboardFrame.cgRectValue.height } tableViewBottomLayoutConstraint.constant = keyboardHeight } @objc func keyboardWillDisappear(notification: NSNotification?) { tableViewBottomLayoutConstraint.constant = 0.0 }
Обновление Swift 4.2
private func setUpObserver() { NotificationCenter.default.addObserver(self, selector: .keyboardWillShow, name: UIResponder.keyboardWillShowNotification, object: nil) }способ селектора:
@objc fileprivate func keyboardWillShow(notification:NSNotification) { if let keyboardRectValue = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { let keyboardHeight = keyboardRectValue.height } }
более короткая версия здесь:
func keyboardWillShow(notification: NSNotification) { if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() { let keyboardHeight = keyboardSize.height } }
/ / Шаг 1: - Регистрация NotificationCenter
ViewDidLoad() { self.yourtextfield.becomefirstresponder() // Register your Notification, To know When Key Board Appears. NotificationCenter.default.addObserver(self, selector: #selector(SelectVendorViewController.keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) // Register your Notification, To know When Key Board Hides. NotificationCenter.default.addObserver(self, selector: #selector(SelectVendorViewController.keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) }// Шаг 2 :- Эти методы будут вызываться автоматически, когда клавиатура появляется или скрывает
func keyboardWillShow(notification:NSNotification) { let userInfo:NSDictionary = notification.userInfo! as NSDictionary let keyboardFrame:NSValue = userInfo.value(forKey: UIKeyboardFrameEndUserInfoKey) as! NSValue let keyboardRectangle = keyboardFrame.cgRectValue let keyboardHeight = keyboardRectangle.height tblViewListData.frame.size.height = fltTblHeight-keyboardHeight } func keyboardWillHide(notification:NSNotification) { tblViewListData.frame.size.height = fltTblHeight }
Swift 4 .
Самый Простой Метод
override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil) } func keyboardWillShow(notification: NSNotification) { if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { let keyboardHeight : Int = Int(keyboardSize.height) print("keyboardHeight",keyboardHeight) } }
Comments