私のカスタム キーボードupdateConstraints
では、キーボードの高さを増やす制約を追加します。これにより、サブビューが (自動レイアウトも使用して) 新しいサイズに調整されます。レイアウトのサイズ調整が完了し、すべてのサブビューが配置されたら、関数を呼び出す必要があります (後で使用する新しい要素のいくつかの位置を保存し、この新しいレイアウトに応じていくつかの要素を手動で更新するため)。このコードは、デバイスを回転させた後など、サイズが変更され、要素が再配置されたときに再度トリガーする必要があります。そのコードを実行するには、どの関数を使用する必要がありますか?
viewDidAppear
は一度しか呼び出されませんが、その時点ではキーボードのサイズが調整されていないため、それは時期尚早です。
updateViewConstraints
更新された制約に応じてサブビューがまだレイアウトされていないため、機能しません。関数を呼び出す前に更新を強制的に実行しようとして呼び出しをself.view.setNeedsLayout()
試みself.view.layoutIfNeeded()
ましたが、違いはありませんでした。キーボードがサブビューのレイアウトを完了する前に関数を実行します。
私は試しviewDidLayoutSubviews
てみましたが、ビューが落ち着いた後に呼び出されますが、問題は、キーボードでコレクション ビューをスクロールしているときに、この関数が 100 万回呼び出されることです。スクロール中にその関数を呼び出すことはできません。キーボードのサイズが変更され、ビューが定位置に落ち着いた後、一度しか呼び出すことができません。
viewDidAppear
遅延後に呼び出し、さらに遅延後にローテーション メソッドで呼び出すことも考えましviewWillTransitionToSize
たが、これは非常に脆弱です。脆弱性を軽減するために遅延を増やすこともできますが、すべてができるだけ早く更新されるように、このメソッドができるだけ早く呼び出されるようにしたいと考えています。