2015-06-10 5 views
9

मैंने यूनिटी 5.1 का उपयोग कर मोबाइल गेम के लिए पंजीकरण फॉर्म बनाया है। ऐसा करने के लिए, मैं यूनिटी यूआई घटकों का उपयोग करता हूं: स्क्रॉलरक्ट + ऑटोलायआउट (वर्टिकल लेआउट) + टेक्स्ट (लेबल्स) + इनपुट फ़ील्ड। यह हिस्सा ठीक काम करता है।यूनिटी यूआई के साथ स्क्रॉलरेक्ट में किसी विशिष्ट तत्व को कैसे स्क्रॉल करें?

लेकिन, जब कीबोर्ड खोला जाता है, तो चयनित फ़ील्ड कीबोर्ड के नीचे होता है। चयनित फ़ील्ड को देखने के लिए प्रोग्रामेटिक रूप से फ़ॉर्म को स्क्रॉल करने का कोई तरीका है?

मैंने ScrollRect.verticalNormalizedPosition का उपयोग करने का प्रयास किया है और यह कुछ स्क्रॉल करने के लिए ठीक काम करता है, हालांकि मैं चयनित क्षेत्र को चुनने में सक्षम नहीं हूं जहां मैं चाहता हूं।

आपकी मदद के लिए धन्यवाद!

+0

स्पष्टता के लिए अपडेट किया गया व्याकरण चयनित ऑब्जेक्ट clamped है। –

उत्तर

17

मैं आपको मेरा कोड स्निपेट देने जा रहा हूं क्योंकि मुझे सहायक होने की तरह लगता है। उम्मीद है की यह मदद करेगा! जब मैं चैट कार्यक्षमता विकसित की है,

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

इस कोड मेरे लिए ठीक काम कर रहा:

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

धन्यवाद। यह समाधान है। :-) –

+0

मुझे कुछ एंकर चीज़ के कारण ऑफसेट जोड़ना पड़ा, लेकिन अन्यथा यह एक बड़ी मदद थी। – Almo

0

हाँ, यह खड़ी स्क्रॉल करने के लिए कोडिंग का उपयोग कर सकता है, इस कोड का प्रयास करें।

0

यहाँ जिस तरह से मैं 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); 
    } 
} 
संबंधित मुद्दे