在从内容中删除/取消激活子元素后,ScrollRect在夹紧标准化位置时无法正确更新位置

时间:2016-03-24 10:55:18

标签: unity3d unity3d-ui

这是一个在找不到解决方案后我必须解决的问题。

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

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

1 个答案:

答案 0 :(得分:3)

我找到的最佳解决方案是

  1. 在检测到ScrollRect内容中的子项被删除后强制执行Canvas更新。
  2. 然后钳制该值,因为标准化位置已正确更新。
  3. 示例代码:

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