Unity ScrollView滾動(dòng)到底部
引言
在使用ScrollView的時(shí)候,有這么一個(gè)需求,就是ScrollView的內(nèi)容中填充的是一個(gè)動(dòng)態(tài)的列表,在新添加元素的時(shí)候,需要將滾動(dòng)列表自動(dòng)定位到最后一個(gè)。
滾動(dòng)到底部
1、修改Scrollbar Vertical的value
值為0時(shí),位于底部,值為1時(shí),位于頂部。
using UnityEngine;
using UnityEngine.UI;
public class Test : MonoBehaviour
{
public ScrollRect scrollRect;
void Start()
{
scrollRect.verticalScrollbar.value = 0;
}
}
2、修改ScrollRect的verticalNormalizedPosition
值為0時(shí),位于底部
using UnityEngine;
using UnityEngine.UI;
public class Test : MonoBehaviour
{
public ScrollRect scrollRect;
void Start()
{
scrollRect.verticalNormalizedPosition = 0;
}
}
3、直接修改ScrollRect的content的位置
這個(gè)需要計(jì)算下具體的位置。
自動(dòng)滾動(dòng)到底部
因?yàn)樾枰詣?dòng)計(jì)算大小和列表排列,所以在ScrollRect的Content上加入了Grid Layout Group和Content Size Fitter,但是在加入新元素時(shí),使用了上述方法后,發(fā)現(xiàn)有時(shí)候會(huì)自動(dòng)到底部,有時(shí)候會(huì)差一點(diǎn)點(diǎn),巧合是差的一點(diǎn)點(diǎn)就剛好是一個(gè)元素的距離。
經(jīng)過(guò)分析后發(fā)現(xiàn),在加入新的元素時(shí),有時(shí)候UI界面沒(méi)有及時(shí)刷新更改大小,所以我就想著可能等到下一幀或者等一幀說(shuō)不定就可以。
yield return new WaitForEndOfFrame();
yield return new WaitForFixedUpdate();
結(jié)果發(fā)現(xiàn)還是沒(méi)有解決。
最后,通過(guò)手動(dòng)刷新Canvas,Grid Layout Group和Content Size Fitter,才解決了這個(gè)問(wèn)題。
Canvas.ForceUpdateCanvases();
_ScrollRect.content.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical();
_ScrollRect.content.GetComponent<ContentSizeFitter>().SetLayoutVertical();
_ScrollRect.verticalNormalizedPosition = 0;
尾語(yǔ)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-403754.html
如果有寫(xiě)的不對(duì)的地方,歡迎各位大佬批評(píng)指正。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-403754.html
到了這里,關(guān)于Unity Scroll Rect滾動(dòng)到底部的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!