0

私はこの問題に約 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

4

1 に答える 1

0

これに何日も苦労し、どのルートを取るかを熟考した後、UIViewController を組み込みのスクロール機能を提供する UITableViewController に変えることにしました。言語ごとに手動で車輪を再発明する代わりに、カスタマイズされた TableView に落ち着く方がはるかに簡単だと思いました。

于 2013-01-24T04:46:53.370 に答える