いくつかのテキスト フィールドを含むスクロール ビューを使用しています。テキスト フィールドが「編集を開始」したら、次の 3 つの操作を実行します。
スクロール ビューのコンテンツ インセットを変更します (ビュー全体がキーボードの上に表示されるようにします)。このコンテンツ インセットにまだ修正されていない場合にのみ、これを行います。
また、スクロール インジケーターのインセットを 1 in 1 に合わせて変更します。
最後に、スクロール ビューのコンテンツ オフセットを特定の値に変更します。
しかし、奇妙なことが起こります。テキスト フィールドをタップすると、スクロール ビューが特定の値よりも大きいコンテンツ オフセットにアニメーション化され、すぐにその特定の値に戻ります。
ステップ1と2の両方がその理由であると思われたので、それらを除外したところ、すべて正常に機能しました。ただし、これにより、スクロール ビューの一部がキーボードの下に隠れてしまいました。
編集:これが私が使用するコードです(テキストフィールドが編集を開始するときに呼び出されます):
UIScrollView *scrollView = (UIScrollView *) self.view;
if (scrollView.contentInset.bottom != C_SCROLL_VIEW_CONTENT_INSET_BOTTOM) {
[scrollView setContentInset:UIEdgeInsetsMake(C_ORIGIN_ZERO,
C_ORIGIN_ZERO,
C_SCROLL_VIEW_CONTENT_INSET_BOTTOM,
C_ORIGIN_ZERO)];
[scrollView setScrollIndicatorInsets:UIEdgeInsetsMake(C_ORIGIN_ZERO,
C_ORIGIN_ZERO,
C_SCROLL_VIEW_CONTENT_INSET_BOTTOM,
C_ORIGIN_ZERO)];
}
if (textField.tag == C_TAG_BUTTON) {
[scrollView setContentOffset:CGPointMake(C_ORIGIN_ZERO, C_ORIGIN_SHIFT_SCROLL_VIEW_FOR_CURRENT_Y)
animated:YES];
return;
}