2017-01-14 6 views
0

Я должен получить высоту клавиатуры во время создания пользовательского интерфейса! Поэтому я не могу использовать метод, который контролирует высоту клавиатуры при ее появлении. Я просто получаю конечную статическую высоту, а не динамическую ~~, как я могу это сделать.Как я могу получить высоту клавиатуры?

ответ

3

Я могу вам сказать, что высота клавиатуры 216px в портретном и 162px в пейзаж, но используя фиксированную высоту клавиатуры плохой выбор , Начиная с iOS 8, пользователь может выбирать между различными сторонними клавиатурами и включать или отключать интеллектуальные текстовые сообщения, которые могут сделать клавиатуру выше.

iOS предоставляет удобные типы уведомлений, которые можно наблюдать в вашем контроллере просмотра. Этими уведомлениями являются:

  • NSNotification.Name.UIKeyboardWillShow: отправлено непосредственно перед отображением клавиатуры.
  • NSNotification.Name.UIKeyboardDidShow: отправлено сразу после отображения клавиатуры.
  • NSNotification.Name.UIKeyboardWillHide: отправлено непосредственно перед увольнением с клавиатуры.
  • NSNotification.Name.UIKeyboardDidHide: отправлено сразу после увольнения с клавиатуры.
  • NSNotification.Name.UIKeyboardWillChangeFrame: отправлен непосредственно перед изменением рамки клавиатуры.
  • NSNotification.Name.UIKeyboardDidChangeFrame: отправлено сразу после изменения рамки клавиатуры.

Вы можете зарегистрироваться, чтобы эти уведомления путем добавления наблюдателя в viewDidLoad или viewDidAppear метода контроллера вида:

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

Кроме того, не забудьте удалить его в deinit/viewDidDisappear метод: NotificationCenter. default.removeObserver (self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)

Создайте метод, связанный с вашим наблюдателем (в данном случае, keyboardWillShow(notification:):

func keyboardWillShow(notification : Notification) { 
    let info:NSDictionary = notification.userInfo! as NSDictionary 
    let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue 
    self.keyboardHeight = Double(keyboardSize.height) 
} 

Ссылка: https://developer.apple.com/reference/foundation/nsnotification.name

+1

нормально, он может вычислить высоту Теперь –

0

Если вам нужна высота для обработки клавиатуры, то мой друг, вы делаете это неправильно, просто используйте этот классный library и напишите это приложение делегировать

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    IQKeyboardManager.sharedManager().enable = true 

    return true 
} 

Эта библиотека будет обрабатывать все ваши хлопоты для обработки клавиатуры

0

Я сделал это в методе, который вызывается после уведомления клавиатуры. Это выглядит следующим образом:

func keyboardDidShow(notification: NSNotification) { 

    let keyboardInfo = notification.userInfo 
    let keyboardRect = keyboardInfo?[UIKeyboardFrameBeginUserInfoKey] as! CGRect 
    let keyboardSize = keyboardRect.size 
    var overviewRectangle = self.view.frame 

    overviewRectangle.size.height += keyboardSize.height 
    self.overviewScrollView.contentSize = overviewRectangle.size 
    self.overviewScrollView.setContentOffset(CGPoint.init(x: 0, y: (overviewRectangle.origin.y + keyboardSize.height)), animated: true) 
} 

func keyBoardDidDisappear(notification: NSNotification) { 
    let overviewRectangle = self.view.frame 

    self.overviewScrollView.contentSize = overviewRectangle.size 
    self.overviewScrollView.setContentOffset(CGPoint.init(x: 0, y: overviewRectangle.origin.y), animated: true) 

} 
+0

гм ... это кажется немного комплекса, мне нравится то, что сказал Nicola –

+0

~~ Я не думаю, что мои методы, что разные. Единственное различие заключается в том, что второй добавленный мной метод следует игнорировать, а первый метод настраивает вид прокрутки, поэтому экран адаптируется к размеру клавиатуры. – MacUserT

+0

Я попробую ваш метод в следующий раз, когда мне это понадобится. –

Смежные вопросы