从内容中删除/停用子元素后,在夹紧规范化位置时,ScrollRect 无法正确更新位置

Ale*_*lex 2 unity-game-engine unity3d-ui

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

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

  • 在用户与 ScrollRect 内容交互之前,规范化的位置值不会更新。
  • 在停用元素后手动设置规范化位置将不起作用,因为它正在处理尚未更新的旧值(请参阅上文了解原因)。

Ale*_*lex 8

我发现的最佳解决方案是

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

示例代码:

        if (isRemoving) {
            Canvas.ForceUpdateCanvases();
            scrollRect.horizontalNormalizedPosition = Mathf.Clamp(scrollRect.horizontalNormalizedPosition, 0f, 1f);
        }
Run Code Online (Sandbox Code Playgroud)