Role para que o item selecionado esteja na parte superior da lista suspensa de itens
Ambiente de verificação
- Windows
-
- Janelas 11
- Unity Editor
-
- 25.3.2020F1
Pré-requisitos para esta dica
As configurações a seguir foram feitas com antecedência como pré-requisito para a explicação dessas dicas.
Ao exibir a lista suspensa de itens, o item superior é sempre exibido.
Se o número de itens suspensos for maior que a área suspensa, a rolagem será exibida, Nesse momento, o primeiro item exibido será sempre o item na parte superior.
Isso também é verdadeiro quando o item na parte inferior é selecionado e expandido.
No entanto, algumas pessoas podem querer o item que estão selecionando no topo da lista quando expandido. Para acomodar isso, você precisa definir as seguintes configurações adicionais:
Role para que o item selecionado fique na parte superior ao expandir a lista suspensa
Isso é feito por um script. Adicione um script ao seu projeto e nomeie-o, DropdownScroll
mas o nome é arbitrário.
Ao abrir o Editor de Scripts, digite o seguinte:
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);
}
}
O conteúdo do código não é tão complicado. Quando a lista suspensa é expandida, a posição de rolagem é calculada e definida para que o item selecionado fique na parte superior.
Start
A razão para escrevê-lo no método é porque ele assume que o processo de inicialização funcionará toda vez que a lista suspensa for expandida.
Depois de salvar o código, anexe esse Dropdown
Template
script ao .
Temolate
Os objetos sob ele são gerados quando o menu suspenso é expandido após a execução do jogo.
O componente anexado também é inicializado no momento da implantação.
Além disso, quando a lista suspensa é fechada, o objeto expandido é destruído,
Se você implantá-lo novamente, ele será gerado novamente, portanto, o processo de inicialização será executado após cada implantação.
Vamos tentar.
Como mencionado acima, a lista suspensa que não executou nenhuma ação não ficará visível mesmo se você expandi-la com o item abaixo selecionado. Por outro lado, se você expandir a lista suspensa que abordamos, verá que ela está rolada até o ponto em que você pode ver o item selecionado.