Apple のメッセージ アプリの下部のテキスト入力バーと同様の配置動作を実現しようとしています。
私は多くのアプローチを試し、高低を検索しましたが、同様の質問がたくさんありますが、満足できるものはありませんでした.
指定します:
UIToolbar
ビューの下部に があります- ツールバーは、キーボードの表示と非表示に合わせてキーボードに従います。
- キーボードが表示されている場合、ツールバーはキーボードの上に留まる必要があります
- キーボードが非表示の場合、ツールバーはビューの下部に固定 (「ドッキング」) されます。
提案された解決策:
キーボードの外観の通知に応じてツールバーを手動でアニメーション化する
このソリューションは、2 番目の要件の特殊なケースを満たしていません (キーボードが表示および非表示になると、ツールバーはキーボードに従います)。
- iOS 7 で
UIScrollViewKeyboardDismissMode
導入されました。キーボードを閉じるためのインタラクティブなジェスチャーを有効にします。ユーザーがキーボードの上端を超えてパンすると、キーボード フレームが徐々に追従します。このソリューションは、この動作に対応するために何もせず、ツールバーをアニメーション化された位置に置き去りにするだけです。
さらに、このソリューションは、3 番目の要件の特殊なケース (キーボードが表示されている場合、ツールバーはキーボードの上にある必要があります) も満たしていません。
- 回転。この解決策では、デバイスの回転に応じてツールバーを回転させるために (次の提案された解決策で説明するように) 追加の厄介な余分なコードが必要になります。
このソリューションの別の問題:
- キーボードの高さ。このソリューションでは、ツールバーはキーボードの高さの一部であると想定されていないため、コンテンツの適切な挿入をサポートするために追加のコードを記述する必要があります。
次に提案された解決策:
UIResponder
を使用inputAccessoryView
このソリューションは、ツールバーを手動でアニメーション化することのすべての欠点を解決するため、Apple がこの種の動作をサポートすることを意図した方法のようです。しかし、このソリューションは 4 番目の要件を完全に欠いています (キーボードが非表示の場合、ツールバーはビューの下部に (「ドッキング」) されたままになります)。
解決策はUIResponder
'sを使用することですinputAccessoryView
が、どういうわけかinputAccessoryView
ビューの下に移動しないようにします。これを達成するためのクリーンなコードを探しています。精巧で、ほとんど高尚な試みが他にもありますが、前述のように、それらは要件を満たしていません。
私の特定のケースではUINavigationController
、これは意図された動作ではないため、追加の問題を伴う のツールバーを使用しようとしていUINavigationController
ます。いずれにせよ、それを達成するためのハッキーな修正を喜んで導入します。