4

いくつかのテキスト フィールドを含むスクロール ビューを使用しています。テキスト フィールドが「編集を開始」したら、次の 3 つの操作を実行します。

  1. スクロール ビューのコンテンツ インセットを変更します (ビュー全体がキーボードの上に表示されるようにします)。このコンテンツ インセットにまだ修正されていない場合にのみ、これを行います。

  2. また、スクロール インジケーターのインセットを 1 in 1 に合わせて変更します。

  3. 最後に、スクロール ビューのコンテンツ オフセットを特定の値に変更します。

しかし、奇妙なことが起こります。テキスト フィールドをタップすると、スクロール ビューが特定の値よりも大きいコンテンツ オフセットにアニメーション化され、すぐにその特​​定の値に戻ります。

ステップ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;
        }
4

1 に答える 1

0

C_SCROLL_VIEW_CONTENT_INSET_BOTTOM が定数であると仮定すると、値が間違っている (大きすぎる) と思います。

于 2014-02-25T08:30:54.977 に答える