因为我常常时间一长就忘记,到要用的时候又要查,又要摸索,很浪费时间,因此写下这篇文章。html
scrollview就是一个能上下或者左右拖动的ui列表,背包、展现多个按钮等状况的时候会用到。算法
要组成一个完整能用的ScrollView,须要如下几个组件:ui
scroll rect、 mask、各类layout。大体ui层级结构以下:spa
先说说scroll rect ,这个东西是位于最上面父节点的组件 content属性下的物体是方各类item的;horizontal和vertical是各类垂直横行拖动;viewprot显示item的框,须要有mask组件。3d
而后是content,它下面放各类item一、二、三、4...,想要让它能自动排列item项,须要有下面那三个组件,选一个就好(这些组件的里面有些默认选项,强烈建议勾都去掉)code
自动生成的物体item放在content节点下。orm
content的大小适不适中,关系到最后的拖动效果。太大的话最后结果会有剩余的空余地方,很很差看;过小的话最后结果可能会形成不管怎么拖动,都看不到全部的item项。htm
为了应对上述所说的状况,咱们要对content物体的rect transform控件进行设置,如下以Vertical layout Group形式进行代码示例(在这以前,content的竖向大小要设置成最小):blog
for (int i = 1; i < content.transform.childCount; i++)//除了第0个样本item,其余都要删除(若是要屡次在这个content下从新生成item的话) { Destroy(content.transform.GetChild(i).gameObject); } RectTransform rect = content.GetComponent<RectTransform>();//获取content的rect transform组件 Dictionary<string, string>.Enumerator it = dic.GetEnumerator();//假设dic是从某某配置表获取的item具体配置 int index = 0; while (it.MoveNext()) { GameObject btn_item = Instantiate(item.gameObject); btn_item.transform.SetParent(content.transform);//必定要先设置父物体,否则生成的item的尺寸会使人蛋疼 btn_item.transform.localScale = item.transform.localScale; btn_item.gameObject.SetActive(true);//item自己默认隐藏 index++; float btn_rect = btn_item.GetComponent<RectTransform>().rect.height;//获取单个按钮的高度 rect.offsetMin = new Vector2(rect.offsetMin.x, -1 * btn_rect * index);//对content的高度进行修改,往下要乘-1 }
这样就能让content得到合适的大小了。若是使用gridlayout的话算法要变一下,要根据item和content的宽度来算。get
想要知道设置rect transform大小的其余属性的方法在另外一篇文章里,连接:https://www.cnblogs.com/Transmuter/articles/11077520.html