2

の一番上までスクロールしたいUIScrollView。次の 2 つの可能性があります。

  • setContentOffset()
  • scrollView.contentOffset

(0, -26)アニメーションを使用すると、スクロールビューがではなく にスクロールすることがあり(0, 0)ます。そのため、さらにスクロールしますが、 には戻りません(0, 0)。これは現在、iPad でのみ発生します。

アニメーションを使用しない場合、これは常に期待どおりに機能します。誰かがここで何が悪いのか手がかりを持っていますか? これをiPad 2 iOS 8.4シミュレーターでテストしました

編集:

私が電話をかける前に、setContentOffset()私はこれを持っていました:

scrollView.layoutIfNeeded();
scrollView.setContentOffset(somePosition, true);

削除layoutIfNeededすると、問題も削除されます。しかし、なぜ?

注:setContentOffset()連続して複数回呼び出したわけではありません。それは完全に異なるタスクです!

4

1 に答える 1

4

このようにしてみてください:

scrollView.layoutIfNeeded();
delay(0.05) {
    scrollView.setContentOffset(somePosition, true);
}

(ここdelayはどこですか:dispatch_after - GCD in swift?

私の考えでは、これにより、先に進む前にレイアウトの時間が発生する可能性があります。

もう 1 つのアイデアは、これら 2 行の順序を逆にすることです。

scrollView.setContentOffset(somePosition, true);
scrollView.layoutIfNeeded();

ここでの考え方は、アニメーション中にレイアウトが行われるということであり、レイアウトはアニメーション中に機能するように設計されていることがわかっています(たとえば、回転中のレイアウトの変更がアニメーション化されるのはそのためです)。

于 2016-02-16T16:08:56.707 に答える