8

iPhoneでAppleのメッセージアプリに似たUIを作成したいと思います。テーブルビューとその下にテキストフィールドがあります。テキストフィールドを選択すると、キーボードが上にスライドしてコンテンツがキーボードの上に表示されるように、テーブルビューのcontentInsetをアニメーション化します。

パンジェスチャレコグナイザーを使用して、ユーザーがテーブルビューを下にスクロールしていることを検出し、キーボードを下にアニメーション化するコードがあります(Appleのメッセージアプリが表示されている場合は、キーボードを閉じるのと同じ機能があります。下にスクロールしますテーブルビューで、指がテキストフィールドを通過すると、キーボードが下に移動します)。

これはうまく機能しますが、テーブルビューを上にスクロールし、キーボードが下にスライドするときにコンテンツインセットを変更し始めると、テーブルビューが上を通り過ぎてから上に戻り、奇妙なぎくしゃくしたアニメーションが発生します。これは、contentInsetを変更すると、テーブルビューが上部を超えてスクロールされた場合に、contentOffsetがテーブルビューの上部にリセットされ、奇妙な動作をするためだと思います。

contentOffsetを変更せずにスクロールビューのcontentInsetを変更する方法を知っている人はいますか?

4

1 に答える 1

7

小さな回避策ですべてを完全に機能させることができました。私はこれをしました:

// in a method that gets repeatedly called as the pan gesture recognizer changes
if([tableView contentOffset].y > 0) {
    UIEdgeInsets insets = [tableView contentInsets];
    inset.bottom = currentKeyboardHeight;
    [tableView setContentInset:inset];
}

contentOffsetが一番上にあるか、一番上を超えてスクロールされた場合にインセットが変更されないようにします。テーブルを少し下にスクロールしてドラッグすると、インセットが一番上に来るまで変更され、その後、奇妙なちらつきが発生しないように変更が停止されます。


編集:根本的な原因を突き止め、回避策を残すのではなく、これを更新すると思いました。私がやっていたCGAffineTransformMakeTranslationのは、フレーム計算の途中でaをミキシングすることでした。これは、Appleのドキュメントによると大したことではありません。transformプロパティが、でない場合CGAffineTransformIdentityframeは未定義になります。これにより、テーブルビューをスクロールし、同時にコンテンツインセットを変更すると、非常に奇妙な動作が発生しました。

于 2012-07-17T05:43:11.213 に答える