2016-07-12 3 views
2

私はチャットインターフェースを作成していてWhatsAppのように、ユーザーが特定の距離でコレクションをスクロールすると表示される "scrollToBottom"ボタンを作成しました。このボタンは、キーボードが表示され、消えたときにキーボードフレームに完全に従います。唯一の問題は、キーボードが対話的に解除されているときです。このボタンをキーボードフレームに追従させることはできません。キーボードが隠された後でさえ、システムは通知を送信し、ボタンはその定数を変更する。スクロールでインタラクティブに解除されているキーボードの高さを取得

私はキーボードの通知をすべて試みましたが、どれもこの問題で私を助けませんでした。時間内に何かが必要なので、ボタンをキーボードに追従させることができます。でもUIKeyboardWillChangeFrameNotificationは私のために働いていません。上記のコードで

NSNotificationCenter.defaultCenter().addObserver(self, 
                 selector:#selector(self.keyboardWillShow(_:)), 
                 name:UIKeyboardWillShowNotification, 
                 object:nil) 
NSNotificationCenter.defaultCenter().addObserver(self, 
                 selector:#selector(self.keyboardWillHide(_:)), 
                 name:UIKeyboardWillHideNotification, 
                 object:nil) 

private func configureConstantViewNewMessages(notification: NSNotification){ 
     if let userInfo = notification.userInfo { 
      let animationDuration = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue 
      let keyboardEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue() 
      let convertedKeyboardEndFrame = view.convertRect(keyboardEndFrame, fromView: view.window) 
      let rawAnimationCurve = (notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as! NSNumber).unsignedIntValue << 16 
      let animationCurve = UIViewAnimationOptions(rawValue: UInt(rawAnimationCurve)) 

      self.kNewMessages.constant = CGRectGetMaxY(view.bounds) - CGRectGetMinY(convertedKeyboardEndFrame) + 10 

      UIView.animateWithDuration(animationDuration, delay: 0.0, options: [.BeginFromCurrentState, animationCurve], animations: { 
       self.view.layoutIfNeeded() 
       }, completion: nil) 
     } 
    } 

、Iは(kNewMessages)私のボタンの定数をアニメーション化する方法configureConstantViewNewMessagesを呼び出して、それがキーボードの高さに応じてその位置を変えることができます。

英語の間違いをお詫びし申し訳ありません。

+0

を使用する必要があり、キーボードの幅と高さ

についての情報を含むユーザ情報を提供しますキーボードの解任(例えば、一番下に置いておきたい場合は、button.frame.size.height = scrollView.contentSize.heightのようになります)。または、キーボードを表示または非表示にするたびに、ボタンを保持し、その制約の値(animateWithDurationおよびcall layoutIfNeeded()を呼び出す)を変更することで、これを実現できます。 – Cristian

+1

私はすでに2番目のオプションを使用しています。キーボードのフレームが変わるたびに、ボタンの下限に関連する制約を使用してその値を変更します。しかし、私の問題は、私がコレクションビューをスクロールするときにキーボードが消えることと関連しています。ユーザーが対話的にボタンを離している間、ボタンをキーボードのフレームに沿って移動させたいと思います。私が説明しているように少し奇妙であるかどうかはわかりません。 –

答えて

1

下記のコードをご利用ください。

override func viewWillAppear(animated: Bool) { 
      NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil) 
} 



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 
     print(keyboardHeight) 
    } 
1

キーボードが消えたときにキーボードの位置を通知するオブザーバーを追加します。

この通知は、あなたが最後にどこに保存するか、ボタンのフレームを入れて、あなたが.animateWithDurationブロック内でこの文書link

関連する問題