2017-03-11 6 views
1

チャットを行うにはヘルプが必要です。ViewControllerは、キーボードを開いたり閉じたりするときにWhatsappのように動作します。つまり:キーボードが開いていると、ビューが上に移動します。閉じている場合は元の位置に戻ります。iOS Swift3キーボードでテキストフィールドとコンテナビューを移動する

私が既に持っているもの:私のチャットViewControllerはContainerViewを持ち、その下にContainerViewはTextFieldです。 UIKeyboardWillShowとUIKeyboardWillHideをキャッチしている2人のオブザーバを設定しました。 ContainerViewとTextFieldの両方には、上、左、右、下に制約があります。それらの間に垂直間隔があります。

私はtrieを d:私はTextFieldの下限制約をとり、それにキーボードの高さを加えました。それは正しく動く。

私は助けが必要です:ContainerView内のTableViewはTextFieldで正しく移動しません。ここに私の問題を示すいくつかのスクリーンショットがあります:http://imgur.com/a/zd7mw

キーボードがContainerViewをオーバーレイしているようです。しかし、それはContainerView内のTableViewがそれを台無しにしているようです。

TextFieldをクリックしたときに表示される「例のメッセージを読んでくれてありがとう」と思っていますが、それは切れてしまいます。私はあなたがキーボードを開くたびに一番下までスクロールすることを考えましたが、チャットの真ん中を見て、何かを入力しようとするとうまくいきません。

これを読んでいただきありがとうございました、ありがとうございました!

答えて

1

あなたが達成しようとしている何をするには2つの方法があります。プログラムで

  1. は、キーボードの高さを含めて下制約定数を変更します。これにより、テーブルビューの一番下が上に固定されます。

  2. 私が使用する方法は、テーブルビューにキーボードの高さに等しい内容の挿入を追加することです。この方法は、ビューの制約定数を変更する必要がないため、より簡単です。このような

スタート:あなたがテキストフィールドの下にコンテンツをプッシュしたい場合は、キーボードの高さにあなたのテキストフィールドの高さを追加すること

override func viewDidLoad(){ 
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardShow), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil) 
} 

func keyboardShow(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     self.tableView.contentInset = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0) 
    } 
} 

func keyboardHide(notification: NSNotification) { 
    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) 
} 

注意。

+0

これはiOS 10ではうまく動作しましたが、iOS 11ベータ6ではうまく動作しませんでした。 'UIKeyboardFrameEndUserInfoKey'を使用すると、両方のバージョンで動作しました。 –

関連する問題