Unity Scroll Rect滚动到底部

Unity ScrollView滚动到底部

引言

在使用ScrollView的时候,有这么一个需求,就是ScrollView的内容中填充的是一个动态的列表,在新添加元素的时候,需要将滚动列表自动定位到最后一个。

滚动到底部

1、修改Scrollbar Vertical的value

值为0时,位于底部,值为1时,位于顶部。

using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    public ScrollRect scrollRect;

    void Start()
    {
        scrollRect.verticalScrollbar.value = 0;
    }

}

在这里插入图片描述

2、修改ScrollRect的verticalNormalizedPosition

值为0时,位于底部

using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    public ScrollRect scrollRect;

    void Start()
    {
        scrollRect.verticalNormalizedPosition = 0;
    }

}

3、直接修改ScrollRect的content的位置

这个需要计算下具体的位置。

在这里插入图片描述

自动滚动到底部

因为需要自动计算大小和列表排列,所以在ScrollRect的Content上加入了Grid Layout Group和Content Size Fitter,但是在加入新元素时,使用了上述方法后,发现有时候会自动到底部,有时候会差一点点,巧合是差的一点点就刚好是一个元素的距离。

经过分析后发现,在加入新的元素时,有时候UI界面没有及时刷新更改大小,所以我就想着可能等到下一帧或者等一帧说不定就可以。

yield return new WaitForEndOfFrame();


yield return new WaitForFixedUpdate();

结果发现还是没有解决。

最后,通过手动刷新Canvas,Grid Layout Group和Content Size Fitter,才解决了这个问题。

Canvas.ForceUpdateCanvases();
_ScrollRect.content.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical();
_ScrollRect.content.GetComponent<ContentSizeFitter>().SetLayoutVertical();
_ScrollRect.verticalNormalizedPosition = 0;

尾语

如果有写的不对的地方,欢迎各位大佬批评指正。

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡定九号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值