1

私は、Apple自身を含め、キーボードの存在を処理するためにスクロールビューの複数の実装を試しました。私はそれらのどれも動作させることができません。

キーボードが表示されていないときにスクロールする必要のないビューがありますが、テキストフィールドが最初の応答者になり、キーボードが表示されたら、一部のコンテンツをスクロール可能にする必要があります。

編集可能なテキストフィールドは画面の最初のフィールドだけなので、ビューをスクロールして何かを再表示する必要はありません。画面の上半分にスクロール機能が必要ですが、キーボードが表示されている場合のみです。

これは私が得ることができる限り近いです:

キーボード通知を正常に登録できます。読み込み時に、スクロールビューとコンテンツサイズをビューの全高に設定しています。キーボードが表示されたら、スクロールビューのサイズを元の高さからキーボードの高さを引いたものに変更します。

scrollView.frame = CGRectMake(0, 0, 320, 416 - kbSize.height);

そして非表示にすると、私はそれをリセットするだけです:

scrollView.frame = CGRectMake(0, 0, 320, 416);

これはほとんど機能します。ただし、キーボードが表示されたら、ビューの一番下までスクロールして(キーボードを表示したまま)、リターンキーを使用してキーボードを非表示にすると、スクロールビューのサイズが変更されると、上に戻るエレガントな「ジャンプ」が発生します。画面の。スクロールビューのサイズを変更するためのスムーズなアニメーションスクロールはありません。

何か案は?私はAppleの実装と比較してこれをハックしていると思いますが、これは私が得たものに最も近いものです。

4

2 に答える 2

0

閉じる前にスクロール位置を修正できると思います:

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {

    // like this:
    self.contentOffset = CGPointMake(0,0);

    // you can animate the frame change here, or where you were doing it
    [UIView animateWithDuration:0.2 animations:^{
        scrollView.frame = CGRectMake(0, 0, 320, 416);
    }];
    return YES;
}
于 2012-04-17T14:54:28.790 に答える
0

ええ、ジャスティン・ポールソンがコメントしたように、ここにコードがあります

[UIView animateWithDuration:0.3 animations:^{
        self.scrollView.frame = newFrame;
}];
于 2012-04-17T14:21:47.467 に答える