跳转到主要内容

瀑布流布局

瀑布流布局允许您创建高度不同的项目网格。它是展示不同大小的图像集合的绝佳方式。

要开始使用,请从 @shopify/flash-list 导入 MasonryFlashList,并像使用 FlashList 一样使用它

import React from "react";
import { View, Text, StatusBar } from "react-native";
import { MasonryFlashList } from "@shopify/flash-list";
import { DATA } from "./data";

const MyMasonryList = () => {
return (
<MasonryFlashList
data={DATA}
numColumns={2}
renderItem={({ item }) => <Text>{item.title}</Text>}
estimatedItemSize={200}
/>
);
};

注意: 如果您希望 MasonryFlashList 优化项目排列,请启用 optimizeItemArrangement 并传递一个有效的 overrideItemLayout 函数。

不支持的属性

FlashList 相比,MasonryFlashList 不支持某些属性

其他属性

MasonryFlashListFlashList 的基础上支持以下附加属性

optimizeItemArrangement

optimizeItemArrangement?: boolean;

如果启用,MasonryFlashList 将尝试通过修改项目顺序来减少列高度的差异。如果为 true,则必须指定 overrideItemLayout。默认值为 false

getColumnFlex

getColumnFlex?: (
items: T[],
columnIndex: number,
maxColumns: number,
extraData?: any
) => number;

getColumnFlex 允许您更改列表的列宽。如果您希望某些列比其他列更宽,这将很有帮助。

示例

// if `numColumns` is `3`, you can return `2` for `index 1` and `1` for the rest to achieve a `1:2:1` split by width.
getColumnFlex={(items, index, maxColumns, extraData) => {
return index === 1 ? 2 : 1;
}}

renderItem 参数中的附加信息

export interface MasonryListRenderItemInfo<TItem>
extends ListRenderItemInfo<TItem> {
columnSpan: number;
columnIndex: number;
}

使用 MasonryFlashList 时,renderItem 属性回调将在 info 对象上调用两个附加属性。

columnIndex:一个数字,表示项目渲染所在列的索引。当使用 optimizeItemArrangement 时,这变得更加重要,因为项目不再线性地分布在各列中。

columnSpan:一个数字,表示给定项目可以跨越的列数,目前这将始终返回 1

方法

MasonryFlashList 公开了 FlashList 的一些方法。它们是

scrollToEnd()

scrollToEnd?: (params?: { animated?: boolean | null | undefined });

滚动到内容的末尾。

scrollToOffset()

scrollToOffset(params: {
animated?: boolean | null | undefined;
offset: number;
});

滚动到列表中特定的内容像素偏移量。

参数 offset 期望滚动的偏移量。

参数 animated (默认为 false) 定义列表在滚动时是否应该动画。