Scorrere in modo che l'elemento selezionato si trovi in cima all'elenco degli elementi a discesa

Pagina aggiornata :
Data di creazione della pagina :

Ambiente di verifica

Finestre
  • finestre 11
Unity Editor
  • 2020.3.25f1

Prerequisiti per questo suggerimento

Le seguenti impostazioni sono state effettuate in anticipo come prerequisito per la spiegazione di questi suggerimenti.

Quando si visualizza l'elenco a discesa degli elementi, viene sempre visualizzato l'elemento superiore.

Se il numero di elementi a discesa è maggiore dell'area a discesa, verrà visualizzato lo scorrimento, A quel punto, il primo elemento visualizzato sarà sempre l'elemento in alto.

Questo vale anche quando l'elemento in basso viene selezionato ed espanso.

Tuttavia, alcune persone potrebbero volere che l'elemento che stanno selezionando in cima all'elenco quando viene espanso. A tale scopo, è necessario configurare le seguenti impostazioni aggiuntive:

Scorri in modo che l'elemento selezionato sia in alto quando espandi il menu a discesa

Questa operazione viene eseguita da uno script. Aggiungere uno script al progetto e assegnargli un nome, DropdownScroll ma il nome è arbitrario.

Quando si apre l'editor di script, immettere quanto segue:

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);
  }
}

Il contenuto del codice non è così complicato. Quando l'elenco a discesa viene espanso, la posizione di scorrimento viene calcolata e impostata in modo che l'elemento selezionato sia in alto.

Start Il motivo per scriverlo nel metodo è perché presuppone che il processo di inizializzazione funzioni ogni volta che l'elenco a discesa viene espanso.

Dopo aver salvato il codice, allegare questo Dropdown Template script a .

Temolate Gli oggetti sottostanti vengono generati quando il menu a discesa viene espanso dopo l'esecuzione del gioco. Anche il componente collegato viene inizializzato al momento della distribuzione. Inoltre, quando l'elenco a discesa viene chiuso, l'oggetto espanso viene eliminato, Se lo si distribuisce di nuovo, verrà generato di nuovo, quindi il processo di inizializzazione verrà eseguito dopo ogni distribuzione.

Proviamoci.

Come accennato in precedenza, il menu a discesa che non ha eseguito alcuna azione non sarà visibile anche se lo espandi con l'elemento sottostante selezionato. D'altra parte, se espandi il menu a discesa di cui abbiamo parlato, puoi vedere che viene fatto scorrere fino al punto in cui puoi vedere l'elemento selezionato.