Swift:基于UIStackView的网格布局
我们的目标是获得具有可变单元格数量的可重用网格组件。 让我们为网格准备一个容器。 请注意,此实现不支持滚动,要启用垂直滚动,您将需要使用UIScrollView
包装网格。
为了让我们的网格动态调整大小,我们需要跟踪其中的当前单元格数量。 我们还需要知道一行可以包含多少个单元(一行的大小)以及网格单元的高度。 每当当前行超过其大小时,我们都将开始一个新行。
让我们看一下prepareRow()
函数。 网格中的每一行都由一个水平的堆栈视图表示,并且由于我们希望所有像元具有相同的宽度,因此分配模式设置为fillEqually
。
为了向网格中添加新的单元格,我们将使用一个实例函数(我们也可以将一个单元格数组传递给GridComponent
”函数,这将是一种更美观的方法,但是在此实现中将省略它)。
我们的GridComponent
几乎准备就绪。 但是我们仍然需要解决一个小问题。 我们在这里使用的水平堆栈视图具有fillEqually
分布模式,并且如果最后一行中的单元格数量小于行的大小,则最后一行中的单元格将以不同的方式分布。
一种解决方案是使用伪造的单元格填充最后一行。 我们可以使用一个简单的UIView
,但是如果需要的话,我将创建FakeCell
类来区分假单元格和网格中的实际单元格。
addCell
函数的最终实现将如下所示:
现在我们完成了。 但是对于具有大量单元格的网格,我仍然建议使用UICollectionView
来提高性能。
感谢您的阅读,如果您发现这篇文章对您有帮助,请别忘了鼓掌!