UGUI - 关于ScrollContent 和 Grid使用
2015-06-10 18:41
411 查看
效果图:左上区域为准,通过点击+-item添加内容(红色的item)。
![](http://img.blog.csdn.net/20150610181037310?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfYmluZ2ZlbmdfOA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
步骤:
1.新建Canvas,将canvas的rendermode设置成screenspace - camera,canvas scaler中的screen match mode设置为expand(可以不设置);
2.建立一个panel,添加ScrollRect组件,设置是横向还是纵向的滑动效果,以及移动类型movementtype(具体效果可以自行设置试试);
3.在已有的panel下建一个grid,并给与一个verticallayoutgroup或者horizontallayoutgroup(取决于是横向或者纵向的滑动效果,至于与gridlayoutgroup的差别下面会解释下),设置verticallayoutgroup的内容,padding是指item与scrollrect的边缘的距离,spacing指item之间的间隙,childalignmetn指item的对齐方式,childforceexpand 指显示width或者height上的扩展;
4.建立一个item,添加组件layoutelement来控制当前这个item的布局,定义item的最小值和首选大小,或者可以重写最小值或首选大小,这里显示了首选高度为50,将此item作为预设即可。
5.写脚本:将脚本挂在menu上,additem和deleteitem分别是addbutton和deletebutton调用的方法。
注释:
关于gridlayoutgroup和verticallayoutgroup的区别在于:gridlayoutgroup多了个限制item大小的选项,可以进行自动横纵向排布。
步骤:
1.新建Canvas,将canvas的rendermode设置成screenspace - camera,canvas scaler中的screen match mode设置为expand(可以不设置);
2.建立一个panel,添加ScrollRect组件,设置是横向还是纵向的滑动效果,以及移动类型movementtype(具体效果可以自行设置试试);
3.在已有的panel下建一个grid,并给与一个verticallayoutgroup或者horizontallayoutgroup(取决于是横向或者纵向的滑动效果,至于与gridlayoutgroup的差别下面会解释下),设置verticallayoutgroup的内容,padding是指item与scrollrect的边缘的距离,spacing指item之间的间隙,childalignmetn指item的对齐方式,childforceexpand 指显示width或者height上的扩展;
4.建立一个item,添加组件layoutelement来控制当前这个item的布局,定义item的最小值和首选大小,或者可以重写最小值或首选大小,这里显示了首选高度为50,将此item作为预设即可。
5.写脚本:将脚本挂在menu上,additem和deleteitem分别是addbutton和deletebutton调用的方法。
public GameObject _item; private int _itemIndex = 0; private float _itemChangeHeight = 0; private float maxScrollContent = 0; public Transform _grid_one; public Transform _grid_two; void Start() { } public void AddItems() { GameObject item = GameObject.Instantiate(_item); item.GetComponentInChildren<Text>().text = "item" + _itemIndex; _itemIndex++; item.transform.parent = _grid_one; item.transform.localPosition = Vector3.zero; item.transform.localScale = Vector3.one; _itemChangeHeight = item.GetComponent<LayoutElement>().preferredHeight + _grid_one.GetComponent<VerticalLayoutGroup>().spacing; ChangeGridOne(_itemChangeHeight); } public void DeleteItems() { int count =_grid_one.childCount; if ( count > 0) { _itemChangeHeight = _grid_one.GetChild(count - 1).GetComponent<LayoutElement>().preferredHeight + _grid_one.GetComponent<VerticalLayoutGroup>().spacing; ChangeGridOne(-_itemChangeHeight); _itemIndex--; DestroyObject(_grid_one.GetChild(count - 1).gameObject); } } void ChangeGridOne(float _changeHeight) { float height = _changeHeight +(_grid_one as RectTransform).rect.height; print(height); (_grid_one as RectTransform).sizeDelta = new Vector2((_grid_one as RectTransform).rect.width, height); //保证显示最下面的item maxScrollContent = (_grid_one.parent as RectTransform).rect.height; if (height > maxScrollContent) { _grid_one.GetComponent<RectTransform>().anchoredPosition3D = new Vector3(0, height - maxScrollContent, 0); } }
注释:
关于gridlayoutgroup和verticallayoutgroup的区别在于:gridlayoutgroup多了个限制item大小的选项,可以进行自动横纵向排布。
相关文章推荐
- NSValue 封装成对象
- 6.9 UIScrollView
- 【Android】ContentValues的用法
- 使用DjangoUeditor将Ueditor移植到Django(BAE环境下)
- Inverse = true,cascade=all
- 【Win 10 应用开发】打印UI元素
- 将UIImage转化成NSData在转化成NSString(将UIImage转化成Base64的字节流)
- Building and Testing with Gradle
- 异步模块定义AMD
- UIView与CALayer的区别,很详细
- oralce10g 安装dbvault出错OUI-25031
- 【MySql】Column count doesn't match value count at row 1 解决方法
- UVA11995:I Can Guess the Data Structure
- 得到UIImage的方法
- iOS UITableView的Section Footer添加按钮
- iOS UITableView的Section Footer添加按钮
- Android Bluetooth开发
- 详细解析BluetoothAdapter的详细api
- GRE的issue写作要求
- 在storyboard中的静态UITableView中拖入 UISearchBar and Search Display Controller出现的奇怪问题