Przewiń tak, aby wybrany element znalazł się na górze listy rozwijanej

Strona zaktualizowana :
Data utworzenia strony :

Środowisko weryfikacyjne

Windows
  • Okna 11
Edytor aparatu Unity
  • 2020.3.25f1

Wymagania wstępne dotyczące tej porady

Poniższe ustawienia zostały wcześniej wprowadzone jako warunek objaśnienia tych wskazówek.

Podczas wyświetlania rozwijanej listy pozycji zawsze wyświetlany jest element górny.

Jeśli liczba rozwijanych elementów jest większa niż obszar rozwijany, zostanie wyświetlone przewijanie, W tym czasie pierwszym wyświetlanym elementem będzie zawsze element u góry.

Dzieje się tak również wtedy, gdy element na dole jest zaznaczony i rozwinięty.

Jednak niektóre osoby mogą chcieć, aby wybrany element znajdował się na górze listy po rozwinięciu. Aby to uwzględnić, należy skonfigurować następujące dodatkowe ustawienia:

Przewiń tak, aby wybrany element znajdował się na górze podczas rozwijania listy rozwijanej

Odbywa się to za pomocą skryptu. Dodaj skrypt do projektu i nazwij go , DropdownScroll ale nazwa jest dowolna.

Po otwarciu Edytora skryptów wprowadź następujące informacje:

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

Zawartość kodu nie jest aż tak skomplikowana. Gdy lista rozwijana jest rozwinięta, pozycja przewijania jest obliczana i ustawiana tak, aby wybrany element znajdował się na górze.

Start Powodem zapisania go w metodzie jest to, że zakłada ona, że proces inicjalizacji będzie działał za każdym razem, gdy lista rozwijana zostanie rozwinięta.

Po zapisaniu kodu dołącz ten Dropdown Template skrypt do pliku .

Temolate Obiekty pod nim są generowane, gdy lista rozwijana jest rozwijana po uruchomieniu gry. Dołączony składnik jest również inicjowany w momencie wdrażania. Ponadto, gdy lista rozwijana jest zamknięta, rozwinięty obiekt jest niszczony, Jeśli wdrożysz go ponownie, zostanie wygenerowany ponownie, więc proces inicjalizacji zostanie wykonany po każdym wdrożeniu.

Spróbujmy.

Jak wspomniano powyżej, lista rozwijana, która nie podjęła żadnych działań, nie będzie widoczna, nawet jeśli rozwiniesz ją z wybranym poniżej elementem. Z drugiej strony, jeśli rozwiniesz listę rozwijaną, którą rozwiązaliśmy, zobaczysz, że jest ona przewinięta do punktu, w którym możesz zobaczyć wybrany element.