SpanGrid 是一个增强型的 SwiftUI
LazyVGrid
,它支持许多额外的特性。
数据源中的所有项目必须符合 SpanGridSizeInfoProvider
协议。此协议为你的数据添加了一个参数,该参数告知网格应填充多少列。
选项包括
cell
,其宽度与一列的宽度相同。row
,它将覆盖所有列,无论有多少列。span
,允许你指定确切的列数。 如果提供的值大于列数,则它将填充该行。如果单元格无法容纳在一行的剩余空间中,则它将创建一个新行,并在前一个行上留下空白。
当为每个单元格返回自定义视图时,它将附带一个元数据模型。 该模型将包含诸如行计算高度之类的信息。 在我们尚未计算它的情况下,此值也可能为 nil
。
选项包括
fixed
大小,其中所有行将是你提供的相同高度。square
,其中每行的高度与单列的宽度相同。如果你的行包含 >1 的跨度,它仍然只会返回单列的宽度。largest
将返回该行中最大单元格的高度,从而允许所有单元格具有相等的高度。none
(默认) 将永远不会返回高度。可以采用多种方法计算单列的宽度、列数和列之间的空间。
选项包括
fixed
提供程序,允许你严格指定上述三个值。dynamic
(默认) 提供了一个固定的列结构,该结构适应设备的大小,并包含一些辅助功能更改。custom
允许你提供自己的实现。 这将为你提供网格的当前宽度。这允许用户使用连接的键盘(iPadOS)在行/项目之间导航。
由于 Apple 的限制,我们目前使用 WASD 键而不是方向键。 我们希望将来会改变。
在实例化 SpanGrid 时,你可以传递键盘导航选项,其中包括启用该功能,以及启用/禁用键盘可发现性和向用户显示的本地化字符串(仅提供默认的英语字符串)。
我并不保证自己是 SwiftUI 方面的专家,因此当前实现可能存在许多问题。 我已尽我所能对其进行了测试,并且没有发现性能或功能方面的实际问题。 欢迎提出问题或发起请求,其中包含增强功能、错误修复、想法等。
Jordan,无论你说多少次,这个项目都**不**叫 Spandex。