我有一個垂直滾動視圖,我想要動態添加內容。爲了做到這一點,我將一個Content Size Fitter組件和一個Vertical Layout Group組件添加到了內容遊戲對象中,這樣,只要我將新的遊戲對象實例化爲其子對象,它的Rect變換就會自動增長。如果滾動條已經在底部,我想在底部添加新對象後將滾動條保持在底部。所以我做了這樣的:內容的Rect變換由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變換最終更新時,滾動到底部爲時已晚。
爲了說明問題,假設我的內容高度爲400像素,滾動條一直處於底部。現在我添加一個對象,它是100像素高。然後我將滾動條發送到底部,但它仍認爲內容高度爲400像素。然後內容大小更新爲500像素,但滾動條降低了400像素,因此它只有80%的降低,而不是100%。
有兩種可能的方法來解決這個問題。我希望強制內容大小配合器立即更新,或者作爲響應內容大小配合器更新作爲事件的方式。
通過研究和實驗,我幾乎把這些線嚴格按照此順序成功地在第一個選項:
Canvas.ForceUpdateCanvases();
scrollRect.content.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ;
scrollRect.content.GetComponent<ContentSizeFitter>().SetLayoutVertical() ;
scrollRect.verticalNormalizedPosition = 0 ;
然而,它並不完全滾動一路底部。它總是大約20個像素。所以我想知道是否還有一些佈局操作我不會強迫發生。也許這是填充什麼的。