Slinkti taip, kad pasirinktas elementas būtų išplečiamųjų elementų sąrašo viršuje

Puslapis atnaujintas :
Puslapio sukūrimo data :

Tikrinimo aplinka

Windows
  • Langai 11
"Unity" redaktorius
  • 2020.3.25f1

Būtinos šio patarimo sąlygos

Šie nustatymai buvo atlikti iš anksto, kaip būtina sąlyga šiems patarimams paaiškinti.

Kai rodomas išplečiamasis elementų sąrašas, visada rodomas viršutinis elementas.

Jei išskleidžiamųjų elementų skaičius yra didesnis nei išskleidžiamojoje srityje, bus rodomas slinkimas, Tuo metu pirmasis rodomas elementas visada bus elementas viršuje.

Tai taip pat taikoma, kai apačioje esantis elementas yra pasirinktas ir išplėstas.

Tačiau kai kurie žmonės gali norėti, kad elementas, kurį jie pasirenka sąrašo viršuje, kai bus išplėstas. Norėdami tai pritaikyti, turite sukonfigūruoti šiuos papildomus nustatymus:

Slinkite taip, kad pasirinktas elementas būtų viršuje, kai plečiate išskleidžiamąjį meniu

Tai daroma pagal scenarijų. Pridėkite scenarijų prie savo projekto ir pavadinkite jį , DropdownScroll bet pavadinimas yra savavališkas.

Atidarę scenarijų rengyklę, įveskite:

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

Kodo turinys nėra toks sudėtingas. Išplėtus išskleidžiamąjį meniu, slinkties padėtis apskaičiuojama ir nustatoma taip, kad pasirinktas elementas būtų viršuje.

Start Priežastis, kodėl jis parašytas metode, yra ta, kad daroma prielaida, kad inicijavimo procesas veiks kiekvieną kartą, kai išplečiamas išskleidžiamasis meniu.

Įrašę kodą, pridėkite šį Dropdown Template scenarijų prie .

Temolate Po juo esantys objektai generuojami, kai išskleidžiamasis meniu išplečiamas po žaidimo vykdymo. Pridedamas komponentas taip pat inicijuojamas diegimo metu. Be to, uždarius išskleidžiamąjį meniu, išplėstas objektas sunaikinamas, Jei įdiegsite jį dar kartą, jis bus sugeneruotas dar kartą, todėl inicijavimo procesas bus vykdomas po kiekvieno diegimo.

Pabandykime.

Kaip minėta pirmiau, išskleidžiamasis meniu, kuriame nebuvo imtasi jokių veiksmų, nebus matomas, net jei jį išplėsite pasirinkę žemiau esantį elementą. Kita vertus, jei išplėsite išskleidžiamąjį meniu, į kurį kreipėmės, pamatysite, kad jis slenkamas iki taško, kuriame galite pamatyti pasirinktą elementą.