2017-10-31 21 views
2

スタックレイアウトとスクロールビューを使用してコメントリストを表示する画面があります。ユーザーはもう1つのコメントを追加して、Xamarinフォームのこのスクロールビューの最後にもう1つコメントを追加することができます(AndroidとiOSアプリ)。このリストをスクロールして最新の表示コメント要素を表示することが必要です。このため、私は以下の行のコードを使用しましたが、最後の要素から2番目の最後の要素までスクロールしません。私はIOSとAndroidの両方でそれを観察しました。Xamarinフォーム - ScrollView - ScrollToAsyncが正常に動作しません。

await scrollView.ScrollToAsync(stkMain, ScrollToPosition.End, true); 

以下の図は、それに関する詳細を示しています。

enter image description here

画像に示されるように、私が最後までスクロールするコード上で使用しているが、スタックレイアウト3は、画面上に表示されません。スクロールビューを上にスクロールしてスタックレイアウト3を表示する必要があります。

予想される動作 - スクロールビューは最後の要素が画面に表示されるまでスクロールする必要があります。私はそれを正しくやっていないといいと思います。

私が言及することを忘れていることの1つは、デバッグモードでscrolToAsyncメソッドを持つ行をポイントで作成した場合です。ブレークポイントがその行をヒットし、F5を押すと最後の要素が表示されます。私はそれを見て驚いていますが、それは起こる

+0

'stkMain'の最後の子を取得してスクロールしようとしましたか? –

+0

私が言及することを忘れていることの1つは、デバッグモードでscrolToAsyncメソッドを持つラインでポイントを作成したときです。ブレークポイントがその行をヒットし、F5を押すと最後の要素が表示されます。私はそれを見て驚いているが、それは起こる。 –

+1

それほど意外ではありません。レンダリング方法は非同期であることが多く、要素がレンダリングされた画面で利用可能になる前にコードビハインドを実行できることに注意してください。私はそれが最良の解決策ではないことを知っていますが、時には視覚的なやり取りを実行する前に300msの遅延を強制することもありました。 (悪い英語のおかげで申し訳ありませんが、私はまだ学んでいます= D) –

答えて

1

あなたの新しいコメント要素の操作が完了した後、いくつかの遅延を追加してからstkMainの最後の子にスクロールしてみてください。

このような何か:

var lastChild = stkMain.Children.LastOrDefault(); 
if(lastChild != null) 
    scrollView.ScrollToAsync(lastChild, ScrollToPosition.MakeVisible, true); 
+0

私はあなたに戻ってみましょう。 –

1

をあなたが(真stkMain.Height、)

scrollView.ScrollToAsyncを試すだけの一番下までスクロールします。

+0

私はこれをしましたが、完全には動作しません。 :( –

+0

stkMain.Heightの多分何かを控除.. –

関連する問題