2016-11-07 1 views
0

Я хочу получить высоту клавиатуры устройства для создания некоторых объектов на одной высоте. Эти объекты будут присутствовать до появления на самом деле клавиатуры, поэтому я не могу использовать такой метод, как this. Мне было интересно, есть ли способ получить высоту клавиатуры, если она не появится на самом деле?Получение высоты клавиатуры до ее появления

+0

Вы должны использовать связанный подход, потому что вы можете» Знаете, что такое keyboa будет отображаться до тех пор, пока он не будет показан. Пользователь может установить пользовательские клавиатуры или переключить клавиатуру. Некоторые клавиатуры будут иметь разную высоту, а некоторые могут иметь панели инструментов. – rmaddy

ответ

0

У Iv также была аналогичная проблема. Я не нашел способ получить высоту клавиатуры, не открыв клавиатуру, но у меня есть способ обойти ее.

var keyboardHeight = CGFloat() 
var keyboardFirstTime = true 

ввиду сделал нагрузки

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 

отдельная функция, которая дает высоту клавиатуры

func keyboardWillShow(_ notification:Notification) 
{ 
    let userInfo:NSDictionary = (notification as NSNotification).userInfo! as NSDictionary 
    let keyboardFrame:NSValue = userInfo.value(forKey: UIKeyboardFrameEndUserInfoKey) as! NSValue 
    let keyboardRectangle = keyboardFrame.cgRectValue 
    keyboardHeight = keyboardRectangle.height 
} 

в textFieldDidBeginEditing

func textFieldDidBeginEditing(_ textField: UITextField) 
{ 
    //adds .01 delay to wait and assign keyboard height for the first time 
    if keyboardFirstTime == true 
    { 
     let when = DispatchTime.now() + 0.01 
     DispatchQueue.main.asyncAfter(deadline: when) 
     { 
      UIView.animate(withDuration: 0.25, delay: 0, options: [.curveEaseOut], animations: 
       { 
       self.searchField.frame.origin.y = self.view.frame.height - self.keyboardHeight - self.searchField.frame.size.height 
       }, completion: nil) 
     } 
     keyboardFirstTime = false 
    } 
    else 
    { 
     UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseOut], animations: 
      { 
       self.searchField.frame.origin.y = self.view.frame.height - self.keyboardHeight - self.searchField.frame.size.height 
      }, completion: nil) 
    } 

    textField.text = "" 
} 
+0

keyboardFirstTime boolean добавляет очень небольшую задержку. Это дает коду достаточно времени для вычисления высоты клавиатуры и установки ее в var. –