2 つのテキスト フィールドがあります。テキスト フィールドをクリックすると (ポートレート モードで)、キーボードは textField を隠しません。しかし、 Landscape に変更すると、キーボードが textFields をオーバーレイします。縦向きと横向きの両方で機能するように、デリゲート メソッド (textFieldShouldBeginEditing、textFieldShouldEndEditing) でフレーム サイズを設定する方法がわかりません。または、スクロールビューを使用する必要がありますか??
3 に答える
を使用し、scrollView
他の UI 要素を のサブビューとして作成する必要がありScrollView
ます。また、 のフレーム サイズscrollView
もウィンドウ全体のサイズを使用するLandscape Mode
必要があります (これについては、学習する必要がありますautoresizingmask
)。そして、textField
andを呼び出すときはkeyboard appears
、フレームのサイズを縮小しscrollView
て、キーボードが表示されていてもスクロールする必要があります。
以下は、textFieldDidBeginEditing および textFieldDidEndEditing メソッドの私のコードです。
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[UIView beginAnimations: nil context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: 0.2];
scrollView.frame = CGRectMake(0,0,320,150);
[scrollView scrollRectToVisible:textField.frame animated:YES];
[UIView commitAnimations];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[self autoCalculateDownPayment];
[UIView beginAnimations: nil context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: 0.2];
scrollView.frame = CGRectMake(0,0,320,416);
[UIView commitAnimations];
}
メソッドの画面の中央にエディットボックス(たとえば)が表示されるように、ViewControllerのフレームを設定する必要があります(void)textFieldDidBeginEditing:(UITextField *)textField
。計算は向きに依存する必要があります。そして、フレームをで元のフレームに設定し(void)textFieldDidEndEditing:(UITextField *)textField
ます。
また、scrollviewを使用したり、編集ボックスにタッチしたときにコンテンツオフセットを変更したりするなど、さまざまなアプローチがあります。
100% 確実な答えを提供することはできません。これは少し主観的なものであり、アプリを実際に見ることができないためです (印刷画面があると便利です)。しかし、私の意見でUIScrollView
は、良い答えになるでしょう。もう 1 つのオプションはUITextField
、キーボードが来ると「上がる」ことができるように、アニメーション化することです。