Swift:基于UIStackView的网格布局

我们的目标是获得具有可变单元格数量的可重用网格组件。 让我们为网格准备一个容器。 请注意,此实现不支持滚动,要启用垂直滚动,您将需要使用UIScrollView包装网格。

为了让我们的网格动态调整大小,我们需要跟踪其中的当前单元格数量。 我们还需要知道一行可以包含多少个单元(一行的大小)以及网格单元的高度。 每当当前行超过其大小时,我们都将开始一个新行。

让我们看一下prepareRow()函数。 网格中的每一行都由一个水平的堆栈视图表示,并且由于我们希望所有像元具有相同的宽度,因此分配模式设置为fillEqually

为了向网格中添加新的单元格,我们将使用一个实例函数(我们也可以将一个单元格数组传递给GridComponent ”函数,这将是一种更美观的方法,但是在此实现中将省略它)。

我们的GridComponent几乎准备就绪。 但是我们仍然需要解决一个小问题。 我们在这里使用的水平堆栈视图具有fillEqually分布模式,并且如果最后一行中的单元格数量小于行的大小,则最后一行中的单元格将以不同的方式分布。

一种解决方案是使用伪造的单元格填充最后一行。 我们可以使用一个简单的UIView ,但是如果需要的话,我将创建FakeCell类来区分假单元格和网格中的实际单元格。

addCell函数的最终实现将如下所示:

现在我们完成了。 但是对于具有大量单元格的网格,我仍然建议使用UICollectionView来提高性能。

感谢您的阅读,如果您发现这篇文章对您有帮助,请别忘了鼓掌!