私はこの問題に約 2 日間費やし、いくつかのスタック オーバーフローやオンラインの投稿を調べましたが、答えが見つからないようです。
6 つの UITextFields があります。キーボードが表示されると、下の 2 つが非表示になります。ただし、入力を開始すると:
4 インチ画面 (iPhone 5): テキストフィールドが上にスクロールし、ナビゲーション バーの後ろに隠れます。
3.5 インチ画面 (iPhone 3GS) の場合: テキストフィールドはナビゲーション バーのすぐ下までスクロールします。
ユーザーが UITextFields をクリックすると、UITextFields が上にスクロールして、ナビゲーション バーのすぐ前に表示されるようにします。このようにして、フィールドが表示され、入力の準備が整い、スクロールアップする前にユーザーが入力を開始するのを待って非表示になりません。
これが関連しているかどうかはわかりませんが、UIControllerView があり、内部には containerView があります。containerView は画面全体をカバーしておらず、X:68 Y:7 から始まります。幅: 237 高さ: 351。ContainerView 内には、UITextFields を持つ UIScrollView があります。containerView には独自の NavigationBar もあります。iPhone 5 (4 インチ画面) で上にスクロールすると、TextField が containerView 内の NavigationBar の後ろに隠れています。iPhone 3GS (3.5 インチ画面) では、UITextfield が NavigationBar のすぐ下に表示されます。
Apple Docs から従ったコードは次のとおりです。
.h
@interface ContactViewController : UIViewController <UITextFieldDelegate>
{
UITextField *activeField;
}
.m
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:)
name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0, 0, kbSize.height, 0.0);
pageScrollView.contentInset = contentInsets;
pageScrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[pageScrollView setContentOffset:scrollPoint animated:YES];
}
}
// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
pageScrollView.contentInset = contentInsets;
pageScrollView.scrollIndicatorInsets = contentInsets;
}
Apple Doc からコードを取得しました: http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement