2015-06-10 22 views
9

Zbudowałem formularz rejestracyjny do gry mobilnej z wykorzystaniem Unity 5.1. Aby to zrobić, używam komponentów Unity UI: ScrollRect + Autolayout (układ pionowy) + tekst (etykiety) + pole wejściowe. Ta część działa dobrze.Jak przewinąć do określonego elementu w ScrollRect przy użyciu Unity UI?

Ale gdy klawiatura jest otwarta, wybrane pole jest pod klawiaturą. Czy istnieje sposób programowego przewijania formularza, aby wyświetlić wybrane pole?

Próbowałem używać ScrollRect.verticalNormalizedPosition i działa dobrze, aby przewinąć niektóre, ale nie jestem w stanie dokonać wybranego pola, gdzie chcę.

Dzięki za pomoc!

+0

Aktualizowane gramatyki dla jasności. –

Odpowiedz

17

Mam zamiar podać fragment kodu, ponieważ mam ochotę być pomocnym. Mam nadzieję że to pomoże!

protected ScrollRect scrollRect; 
protected RectTransform contentPanel; 

public void SnapTo(RectTransform target) 
    { 
     Canvas.ForceUpdateCanvases(); 

     contentPanel.anchoredPosition = 
      (Vector2)scrollRect.transform.InverseTransformPoint(contentPanel.position) 
      - (Vector2)scrollRect.transform.InverseTransformPoint(target.position); 
    } 
+0

Dzięki. To jest rozwiązanie. :-) –

+0

Musiałem dodać offset z powodu jakiegoś zakotwiczenia, ale poza tym była to duża pomoc /. – Almo

0

Tak, jest to możliwe przy użyciu kodowania do przewijania w pionie, spróbuj tego kodu:

//Set Scrollbar Value - For Displaying last message of content 
Canvas.ForceUpdateCanvases(); 
verticleScrollbar.value = 0f; 
Canvas.ForceUpdateCanvases(); 

ten kod działa dobrze dla mnie, kiedy rozwinął funkcjonalność czatu.

0

oto sposób Zacisnęłam zaznaczony obiekt do scrollRect

private ScrollRect scrollRect; 
private RectTransform contentPanel; 

public void ScrollReposition(RectTransform obj) 
{ 
    var objPosition = (Vector2)scrollRect.transform.InverseTransformPoint(obj.position); 
    var scrollHeight = scrollRect.GetComponent<RectTransform>().rect.height; 
    var objHeight = obj.rect.height; 

    if (objPosition.y > scrollHeight/2) 
    { 
     contentPanel.localPosition = new Vector2(contentPanel.localPosition.x, 
      contentPanel.localPosition.y - objHeight - Padding.top); 
    } 

    if (objPosition.y < -scrollHeight/2) 
    { 
     contentPanel.localPosition = new Vector2(contentPanel.localPosition.x, 
contentPanel.localPosition.y + objHeight + Padding.bottom); 
    } 
}