2017-09-20 1 views
5

私は、キーボードの高さ識別コードがiOS11でもう機能していないことに気付きました。swift iOS11 - keyboardSizeの高さがこれ以上機能しないことを確認しました

iOS10デバイスでは、キーボードが特定の入力フィールド(私の場合はテキストフィールド)を隠すかどうかを検出するためにこのロジックを使用しました。その場合、最後のアクティブなテキストフィールドの下にキーボードが表示され、ユーザーが正しく入力できるようになります。

iOS 11の場合、キーボードの識別の高さはではありません。ここでは、キーボードwillAppearロジック ため

ヘルパークラスの例はkeyBoardWillShowが何をするか、単に一例である - >それだけをチェックし、ビューはキーボードがテキストフィールドを非表示にする予定の場合は、キーボードの上にシフトする必要がある場合。

私はいくつかのdebugginを行なったし、次のコード行は、iOSの10とiOS 11の間で異なる動作をすることを見出し:

if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 

iOS10のデバッガ出力

keyboardSize CGRect(原点=(X = 0、y = 568)、サイズ=(幅= 320、高さ= 216))

iOS11デバッガ出力

keyboardSize CGRect(原点=(X = 0、Y = 568)、サイズ=(幅= 320、高さ= 0))

あなたは完全なコードを見ることができます下に - それは、iOSまで働い10.3

func keyboardWillShow(notification: NSNotification, view: UIView, activeTextField: UITextField?, scrollView: UIScrollView?) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if view.frame.origin.y == 0{ 
      var aRect : CGRect = (view.viewWithTag(2)?.frame)! 
      aRect.size.height -= keyboardSize.height 
      if let activeField = activeTextField { 
       let tempPoint = CGPoint(x: activeField.frame.origin.x, y: activeField.frame.origin.y + 20) 
       if (aRect.size.height < tempPoint.y){ 
        view.frame.origin.y -= keyboardSize.height 
        if let scrollView = scrollView { 
         let bottomOffset = CGPoint(x: 0, y: scrollView.contentSize.height - scrollView.bounds.size.height) 
         scrollView.setContentOffset(bottomOffset, animated: true) 
        } 
       } 
      } 
     } 
    } 
} 

UPDATE 2017年9月20日

私は今、何回かそれを試してみました。時にはそれはまた、iOS11のキーボードの高さの値を私に示して - 今、私は完全に混乱している.....

答えて

10

利用UIKeyboardFrameEndUserInfoKey代わりのUIKeyboardFrameBeginUserInfoKey

関連する問題