滚动以使所选项目位于下拉项目列表的顶部

更新页 :
页面创建日期 :

验证环境

窗户
  • 窗户11
Unity 编辑器
  • 2020.3.25f1

此提示的先决条件

作为解释这些提示的先决条件,已预先进行了以下设置。

显示下拉项目列表时,始终显示顶部项目。

如果下拉项的数量大于下拉区域,将显示滚动, 届时,显示的第一个项目将始终是顶部的项目。

当选择并展开底部的项目时也是如此。

但是,有些人可能希望在展开时将他们选择的项目放在列表顶部。 为此,您需要配置以下附加设置:

滚动,使所选项目在展开下拉列表时位于顶部

这是由脚本完成的。 将脚本添加到您的项目中并命名它, DropdownScroll 但名称是任意的。

打开脚本编辑器时,输入以下内容:

using UnityEngine;
using UnityEngine.UI;    // 追加

public class DropdownScroll : MonoBehaviour
{
  public void Start()
  {
    // スクロールの計算に必要な各コンポーネントを取得
    var dropdown = GetComponentInParent<Dropdown>();
    var scrollRect = gameObject.GetComponent<ScrollRect>();
    var viewport = transform.Find("Viewport").GetComponent<RectTransform>();
    var contentArea = transform.Find("Viewport/Content").GetComponent<RectTransform>();
    var contentItem = transform.Find("Viewport/Content/Item").GetComponent<RectTransform>();

    // 選択しているアイテムの位置や表示領域をもとに選択アイテムまでスクロールすべき量を計算する
    var areaHeight = contentArea.rect.height - viewport.rect.height;
    var cellHeight = contentItem.rect.height;
    var scrollRatio = (cellHeight * dropdown.value) / areaHeight;
    scrollRect.verticalNormalizedPosition = 1.0f - Mathf.Clamp(scrollRatio, 0.0f, 1.0f);
  }
}

代码的内容并不复杂。 展开下拉列表时,将计算并设置滚动位置,使所选项目位于顶部。

Start 在方法中编写它的原因是,它假定每次展开下拉列表时,初始化过程都会起作用。

保存代码后,将此DropdownTemplate脚本附加到 。

Temolate 它下面的对象是在游戏执行后展开下拉列表时生成的。 附加的组件也会在部署时初始化。 此外,当下拉列表关闭时,展开的对象将被销毁, 如果再次部署,它将再次生成,因此每次部署后都会执行初始化过程。

让我们试试吧。

如上所述,即使您在选择以下项目的情况下展开未执行任何操作的下拉列表,也不会显示该下拉列表。 另一方面,如果展开我们解决的下拉列表,您可以看到它已滚动到可以看到所选项目的点。