禁止 ScrollView 在子控件的布局改变时自动滚动到最底部

在做项目的时候,遇到了一个问题,就是有下面那样一个布局:
在这里插入图片描述
某种情况下要动态改变 ViewPager 的高度,但是有时候再改变之后,整个页面会自动滑动到最底部,而不是保持原有的位置。

解决方法:
重写scrollview中的如下方法,并将其返回值设为0即可。

@Override
protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
	return 0;
}

【引用自:https://my.oschina.net/cjk035/blog/127445】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
想要实现不使用 ScrollView 组件的自动滚动并循环滚动的话,可以使用 Unity 的 RectTransform 和 ContentSizeFitter 组件以及编写代码来实现。 具体实现步骤如下: 1. 创建一个空的 GameObject,作为容器,并添加一个 RectTransform 组件。 2. 在容器创建多个 GameObject,用于显示内容,并且将它们的 RectTransform 组件设置为相同的大小。 3. 将所有 GameObject 放入一个父节点下,并将父节点的 RectTransform 组件设置为水平或垂直布局,同选择 ContentSizeFitter 组件,并将 Vertical Fit 和 Horizontal Fit 设置为 Preferred Size。 4. 编写脚本来控制容器的滚动。首先,获取容器的 RectTransform 组件和节点的 RectTransform 组件,然后根据需要将节点重新排列,并将容器滚动到正确的位置。 5. 在 Update 函数,不断地调用滚动函数,以便实现自动滚动。可以使用 Time.deltaTime 来控制滚动速度。 6. 当滚动到最后一个节点,将容器滚动到第一个节点的位置,从而实现循环滚动。 下面是一个简单的示例代码: ```csharp using UnityEngine; using UnityEngine.UI; public class AutoScroll : MonoBehaviour { public RectTransform container; public float scrollSpeed = 50f; private RectTransform[] items; private float containerHeight; private float itemHeight; private float scrollPosition; void Start() { items = container.GetComponentsInChildren<RectTransform>(); containerHeight = container.rect.height; itemHeight = items[0].rect.height; scrollPosition = containerHeight; } void Update() { // 计算下一帧的滚动位置 scrollPosition -= Time.deltaTime * scrollSpeed; // 当滚动到最后一个节点,将容器滚动到第一个节点的位置 if (scrollPosition < -itemHeight) { // 将最后一个节点移到第一个节点前面 items[items.Length - 1].SetAsFirstSibling(); // 重新排列节点的位置 for (int i = 0; i < items.Length; i++) { items[i].anchoredPosition = new Vector2(0, -i * itemHeight); } // 重置滚动位置 scrollPosition = containerHeight - itemHeight; } // 滚动容器 container.anchoredPosition = new Vector2(0, scrollPosition); } } ``` 这个示例代码,我们首先在 Start 函数获取容器和节点的 RectTransform 组件,并计算容器的高度节点的高度。然后,在 Update 函数,我们计算下一帧的滚动位置,并在滚动到最后一个节点,将最后一个节点移到第一个节点前面,并重新排列节点的位置。最后,我们通过修改容器的 anchoredPosition 来实现滚动。 需要注意的是,这个示例代码没有考虑容器的宽度和节点的宽度。如果需要支持水平滚动,需要修改代码来考虑宽度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值