2015-06-10 20 views
9

Tôi đã tạo biểu mẫu đăng ký cho trò chơi trên thiết bị di động sử dụng Unity 5.1. Để làm điều đó, tôi sử dụng các thành phần Unity UI: ScrollRect + Autolayout (Bố cục dọc) + Văn bản (nhãn) + Trường nhập. Phần này hoạt động tốt.Cách cuộn đến một phần tử cụ thể trong ScrollRect bằng giao diện người dùng Unity?

Nhưng khi bàn phím được mở, trường đã chọn nằm dưới bàn phím. Có cách nào để lập trình cuộn biểu mẫu để đưa trường được chọn vào chế độ xem không?

Tôi đã thử sử dụng ScrollRect.verticalNormalizedPosition và hoạt động tốt để cuộn một số, tuy nhiên tôi không thể làm cho trường đã chọn xuất hiện ở nơi tôi muốn.

Cảm ơn sự giúp đỡ của bạn!

+0

Cập nhật ngữ pháp cho rõ ràng. –

Trả lời

17

Tôi sẽ cung cấp cho bạn một đoạn mã của tôi vì tôi cảm thấy muốn giúp ích. Hi vọng điêu nay co ich!

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

Cảm ơn. Đây là giải pháp. :-) –

+0

Tôi đã phải thêm một bù đắp do một số điều neo, nhưng nếu không đây là một trợ giúp lớn /. – Almo

0

Có, đây là có thể sử dụng mã hóa để cuộn theo chiều dọc, hãy thử mã này:

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

này đang làm việc tốt cho tôi, khi tôi phát triển chức năng chat.

0

đây là cách tôi kẹp đối tượng được chọn vào 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); 
    } 
} 
Các vấn đề liên quan