在内容中的 removing/deactivating 个子元素之后,ScrollRect 在固定规范化位置时未正确更新位置

ScrollRect does not correctly update the position when clamping the normalized position, after removing/deactivating a child element from the content

这是我在找不到解决方案后不得不自己解决的问题。

问题在于,从 ScrollRect 的内容中移除 GameObject 元素后,它不会固定其规范化位置,直到用户再次开始移动它。这可能会导致 ScrollRect 在显示最后一个元素时显示空 space 并且已停用父元素的最后一个元素。

我找到的最佳解决方案是

  1. 在 ScrollRect 的内容中检测到子项被删除后强制执行 Canvas 更新。
  2. 然后钳制值,因为归一化位置已正确更新。

示例代码:

        if (isRemoving) {
            Canvas.ForceUpdateCanvases();
            scrollRect.horizontalNormalizedPosition = Mathf.Clamp(scrollRect.horizontalNormalizedPosition, 0f, 1f);
        }

好吧,迟到总比不到好。我的旧 Unity 5.6x 也有同样的问题。因此,我发现如果您等待几帧,则在 movementType 之间切换会导致 scrollrect 更新。使用:

StartCoroutine(UpdateScrollRect());
IEnumerator UpdateScrollRect()
    {
        yield return new WaitForEndOfFrame();
        yield return new WaitForEndOfFrame();
        ScrolRect.movementType = ScrollRect.MovementType.Elastic;
        ScrolRect.elasticity = 0f;
        yield return new WaitForEndOfFrame();
        yield return new WaitForEndOfFrame();
        ScrolRect.movementType = ScrollRect.MovementType.Clamped;
    }

也尝试玩跳帧数,它适合您的情况。 干杯! -帕维尔