Unity 給InputField添加滾動條

1.爲了能讓InputField弄個滾動條真的是翻遍了百度,最後還是在自己的努力下完成了這一壯舉。

首先在場景中添加一個ScrollRect(滾動視圖),以下是我的設置,可以根據自己的喜好設置,建議將慣性關掉。

2.在滾動視圖的Content對象添加輸入框InputField

3.將InputField的直線類型設置成多行新行

4.最後開始編寫一個腳本來適應內容。Unity中自帶有自適應的組件但是無法正常使用。

添加一個腳本:InputContentSize.cs

Text組件賦值InputField下的Text

public class InputContentSize: MonoBehaviour
{

    //文本區
    public Text text;
    //輸入框
    public InputField input;
    //內容區
    public RectTransform contents;

    private void FixedUpdate()
    {
        //得到內容的大小
        Vector2 size = contents.sizeDelta;
        //獲取行數,不要使用Text組件來分割,不知道什麼原因無法完整分割。
        string[] texts = input.text.Split('\n');
        //下面是設置寬度的,因爲每段文字都有自己的長度,這裏我們取最長的文字長度
        //先將長度保存到數組中
        List<int> ints = new List<int>();
        foreach (var v in texts)
        {
            ints.Add(v.Length);
        }
        //GetMax是取得最大的數,本函數來自於網絡
        int maxw = GetMax(ints.ToArray());
        //設置寬度:文字長度乘以文字大小,保留一些空白內容所以要在乘以2,也可以根據自己的要求加上一寫像素
        size.x = maxw * text.fontSize*2;
        //設置高度:文字行數乘以文字大小,同樣保留空白區
        size.y = texts.Length * text.fontSize*2;
        //以下是防止內容變小
        //判斷當前寬度是否小於原寬度,如果小於的話則不設置
        if (size.x < 1545.2f)
            size.x = 1545.2f;
        //判斷當前高度是否小於原高度,如果小於的話則不設置
        if (size.y < 714.42f)
            size.y = 714.42f;
        //賦值
            contents.sizeDelta = new Vector2(size.x, size.y);
    }
    /// <summary>
    /// 數組中最大的值
    /// </summary>
    /// <param name="array"></param>
    /// <returns></returns>
    private static int GetMax(int[] array)
    {
        int max = 0;
        for (int i = 0; i < array.Length; i++)
        {
            max = max > array[i] ? max : array[i];

        }
        return max;
    }
}

 

效果圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章