ScrollView Variants
Coding Style wiki
InfiniteScrollView 内置 4 种实现 (皆继承 InfiniteScrollView),将对应组件挂载至 ScrollRect 对象上并指定 cellPrefab 即可使用;初始、数据操作、刷新、滚动与 Snap 等共用 API 详见基类页面。
| 命名空间 | OxGKit.InfiniteScrollView |
| 类型 | VerticalInfiniteScrollView、HorizontalInfiniteScrollView、VerticalGridInfiniteScrollView、HorizontalGridInfiniteScrollView (皆继承 InfiniteScrollView) |
| 源码 | VerticalInfiniteScrollView.cs、HorizontalInfiniteScrollView.cs、VerticalGridInfiniteScrollView.cs、HorizontalGridInfiniteScrollView.cs |
using OxGKit.InfiniteScrollView;
快速上手
实现总览
| 实现 | 排列方式 | 专属成员 |
|---|---|---|
| VerticalInfiniteScrollView | 垂直列表 (上下滚动) | spacing (float) |
| HorizontalInfiniteScrollView | 水平列表 (左右滚动) | spacing (float) |
| VerticalGridInfiniteScrollView | 垂直网格 (上下滚动) | spacing (Vector2)、columnCount |
| HorizontalGridInfiniteScrollView | 水平网格 (左右滚动) | spacing (Vector2)、rowCount |
using Cysharp.Threading.Tasks;
using OxGKit.InfiniteScrollView;
using UnityEngine;
public class GridLauncher : MonoBehaviour
{
public VerticalGridInfiniteScrollView gridScrollView;
private async void Start()
{
// 网格设置 (亦可于 Inspector 配置)
this.gridScrollView.columnCount = 4;
this.gridScrollView.spacing = new Vector2(10f, 10f);
await this.gridScrollView.InitializePool();
for (int i = 0; i < 500; i++)
this.gridScrollView.Add(new InfiniteCellData(new Vector2(100f, 100f), i));
this.gridScrollView.Refresh();
}
}
通用规则
- 4 种实现的差异仅在排列计算与专属成员,数据操作、刷新与 Snap 等 API 皆共用基类行为。
- 列表不会自动配置
ScrollRect的滚动轴向,请自行将ScrollRect的 Vertical / Horizontal 勾选与所用实现对应。
注意 Grid 实现以每一排第一条数据的 cellSize 推进排列与 content 尺寸计算,建议 Grid 使用一致的 cellSize (动态 尺寸适用于 Vertical / Horizontal 列表)。
VerticalInfiniteScrollView
垂直无限列表 (上下滚动),适用排行榜、聊天室等纵向列表。
| 类型 | public class VerticalInfiniteScrollView : InfiniteScrollView |
| 源码 | VerticalInfiniteScrollView.cs |
| 成员 | 说明 |
|---|---|
public float spacing | Cell 的垂直间距。 |
覆写行为
public override void Snap(int index, float duration)
public override bool Remove(int index, bool refresh = true)
Snap:依snapAlign累计cellSize.y + spacing计算垂直目标位置 (content 高度小于 viewport 无法滚动时不动作)。Remove:移除后会将 content 位置回移一格 (cellSize.y + spacing),避免移除当下的视觉跳动。
HorizontalInfiniteScrollView
水平无限列表 (左右滚动),适用卡片列、横向菜单等横向列表。
| 类型 | public class HorizontalInfiniteScrollView : InfiniteScrollView |
| 源码 | HorizontalInfiniteScrollView.cs |
| 成员 | 说明 |
|---|---|
public float spacing | Cell 的水平间距。 |
覆写行为
public override void Snap(int index, float duration)
public override bool Remove(int index, bool refresh = true)
Snap:依snapAlign累计cellSize.x + spacing计算水平目标位置 (content 宽度小于 viewport 无法滚动时不动作)。Remove:移除后会将 content 位置回移一格 (cellSize.x + spacing)。
提醒 页签分页 (TabPage) 应用可以水平列表搭配 Snap 进行页面切换 (参考 Samples 的 Infinite TabPage Demo,详见模块介绍)。
VerticalGridInfiniteScrollView
垂直网格无限列表 (上下滚动),每一横排并排 columnCount 个 Cell,适用背包、商店等网格列表。
| 类型 | public class VerticalGridInfiniteScrollView : InfiniteScrollView |
| 源码 | VerticalGridInfiniteScrollView.cs |
| 成员 | 说明 |
|---|---|
public Vector2 spacing | Cell 间距 (x = 水平、y = 垂直)。 |
public int columnCount | 列数 (每一横排并排的 Cell 数量),默认 1 (小于等于 0 时自动视为 1)。 |
覆写行为
public override void Snap(int index, float duration)
Snap:依目标索引所在的排数 (index / columnCount) 计算垂直目标位置。
注意 columnCount 于 v1.7.1 由 columeCount 更名 (拼写修正),已标注 FormerlySerializedAs,旧场景 / Prefab 的序列化数据会自动迁移。
HorizontalGridInfiniteScrollView
水平网格无限列表 (左右滚动),每一竖排并排 rowCount 个 Cell。
| 类型 | public class HorizontalGridInfiniteScrollView : InfiniteScrollView |
| 源码 | HorizontalGridInfiniteScrollView.cs |
| 成员 | 说明 |
|---|---|
public Vector2 spacing | Cell 间距 (x = 水平、y = 垂直)。 |
public int rowCount | 行数 (每一竖排并排的 Cell 数量),默认 1 (小于等于 0 时自动视为 1)。 |
覆写行为
public override void Snap(int index, float duration)
Snap:依目标索引所在的排数 (index / rowCount) 计算水平目标位置。