2015-06-10 17 views
9

Ho creato un modulo di registrazione per un gioco per dispositivi mobili utilizzando Unity 5.1. Per fare ciò, utilizzo i componenti Unity UI: ScrollRect + Autolayout (layout verticale) + Testo (etichette) + Campo di immissione. Questa parte funziona bene.Come scorrere fino a un elemento specifico in ScrollRect con l'interfaccia utente di Unity?

Tuttavia, quando la tastiera è aperta, il campo selezionato è sotto la tastiera. Esiste un modo per scorrere a livello di codice il modulo per visualizzare il campo selezionato?

Ho provato a utilizzare ScrollRect.verticalNormalizedPosition e funziona benissimo per scorrere alcuni, tuttavia non riesco a far apparire il campo selezionato dove voglio.

Grazie per il vostro aiuto!

+0

grammatica aggiornamento per chiarezza. –

risposta

17

Ho intenzione di darvi un frammento di codice del mio perché mi sento di essere utile. Spero che questo ti aiuti!

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

Grazie. Questa è la soluzione. :-) –

+0

Ho dovuto aggiungere un offset a causa di qualche cosa di ancora, ma per il resto questo è stato un grande aiuto /. – Almo

0

Sì, questo è possibile utilizzando la codifica per scorrere verticalmente, prova questo codice:

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

Questo codice funziona bene per me, quando ho sviluppato funzionalità di chat.

0

qui è il modo in Strinsi oggetto selezionato in 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); 
    } 
} 
Problemi correlati