コンテンツを動的に追加したい垂直スクロールビューがあります。これを行うために、コンテンツサイズフィッタコンポーネントと垂直レイアウトグループコンポーネントをコンテンツゲームオブジェクトに添付して、新しいゲームオブジェクトをその子としてインスタンス化するたびにRect Transformが自動的に拡大するようにしました。スクロールバーが既に下にある場合は、新しいオブジェクトが下に追加された後に、スクロールバーを下に保持します。だから、私はこのようなことをやっている:コンテンツのRect TransformがContent Size Fitterによって更新された後、Unity Scroll Rectをスクロールして下部にスクロールさせるにはどうすればよいですか?
if (scrollRect.verticalNormalizedPosition == 0)
{
isAtBottom = true ;
}
ScrollViewItem item = Instantiate(scrollViewItem, scrollRect.content) ;
if (isAtBottom)
{
scrollRect.verticalNormalizedPosition = 0 ;
}
新しくインスタンス化スクロールビュー項目は、私がゼロにverticalNormalizedPosition
を設定した時間によって、変換のRectの大きさが増加していないので、しかし、これは動作しません。したがって、Rect Transformが最終的に更新されたとき、下部にスクロールするのは遅すぎます。
説明すると、コンテンツの高さが400ピクセルで、スクロールバーが一番下にあるとします。今私はそれに100ピクセルの高さのオブジェクトを追加します。それから私はスクロールバーを下に送りますが、内容はまだ400ピクセルの高さと考えています。コンテンツのサイズは500ピクセルに更新されますが、スクロールバーは400ピクセル下になりますので、100%ではなく80%しかダウンしません。
この問題を解決する方法は2つあります。 Content Size Fitterを即座に更新する方法、またはContent Size Fitterをイベントとして更新する方法のいずれかが必要です。
研究や実験を通して、私はほとんどこの正確な順序でこれらの行を入れて最初のオプションに成功しましたが:
Canvas.ForceUpdateCanvases();
scrollRect.content.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ;
scrollRect.content.GetComponent<ContentSizeFitter>().SetLayoutVertical() ;
scrollRect.verticalNormalizedPosition = 0 ;
しかし、それは非常にすべての方法下までスクロールしません。それは常に約20ピクセル離れています。だから私は強制的に起こらないレイアウト操作がまだあるのだろうかと思っています。おそらくそれは詰め物なのかもしれません。