2016-08-31 6 views
1

TopContainer ViewをしてからScrollviewしてからBottomContainerビューを表示しています。キーボードが表示されているときにオートレイアウトアウトプットを変更する

今、スクロールビューの上端がtopContainerの下端まであり、スクロールビューの下端がbottomcontainerの上端まであるという制約があります。

私はviewcontrollerを起動し、ビュー階層を見ると良いです。

しかし、キーボードが表示されたら、ボトムコンテナが上に移動するように自動レイアウト制約を変更します。

だから私は、私が制約と変化する。このような一定の保存と思った:私はこれを行う際に、キーボードのポップアップアップその後、

private var toolbarBottomConstraint: NSLayoutConstraint? 
self.toolbarBottomConstraint = self.toolbar.autoPinEdgeToSuperviewEdge(.Bottom, withInset: 0) 

をそして:

func keyboardWillShow(notification:NSNotification){ 
    var userInfo = notification.userInfo! 
    var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue() 
    keyboardFrame = self.view.convertRect(keyboardFrame, fromView: nil) 

    self.toolbarBottomConstraint?.constant = keyboardFrame.size.height 
} 

これは何もしません。 。キーボードの高さはちょうど底がキーボードの上にある必要があるオフセットです。

ビューが変更されないのはなぜですか?私は常にそのような定数を変更し、それは常に動作します。今はキーボードを使っているので特別なことをする必要がありますか?

答えて

1

を使用すると、iOSの9のために構築している以上、私はキーボードが表示されたときに自動的に調整するビューの世話をsimple libraryを書いた場合。かなり柔軟性があり、シームレスに動作するはずです。

これを自分でロールしたい場合は、通知のリスナーをどこにも追加していないようです。メッセージがkeyboardWillShow(_:)メソッドに送信される前にそれを行う必要があります。

0

あなたは、制約のセットの後setNeedsLayout()を呼び出してみました?:

self.toolbarBottomConstraint?.constant = keyboardFrame.size.height 
self.view.setNeedsLayout() 
+0

私はすでにこれを試して、動作しません。別のビューでこれを行う必要がありますか? – user1007522

+0

私は 'setNeedsLayout'の代わりに' self.view.layoutIfNeeded() 'でなければなりません。それでも動作しない場合は、制約をチェックする必要があります。変更する制約は、ビューコントローラのビューからスクロールビューに接続されているものでなければなりません。 – Dario

関連する問題