Swift: 我的 UICollectionView 中单元格之间的间距不为零
Swift: The spacing between my cells in my UICollectionView is not zero
虽然我有自己的自定义布局,但我的单元格仍然有一点间距。我试图在每行中放置 7 个项目,但我总是得到 6 个带有一堆间距的项目。
这是我的布局:
class monthFlow: UICollectionViewFlowLayout, UICollectionViewDelegateFlowLayout {
func collectionView(collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: collectionView.frame.size.width/7, height: collectionView.frame.size.height/8)
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
return 0
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
return 0
}
然而它看起来像这样:
这很正常。 UICollectionViewFlowLayout 的内置行为是 space 你的单元格在屏幕上均匀分布(完全合理)。如果你不想要那样,你将不得不做比你在 UICollectionViewFlowLayout 子类中做的更多的事情来改变行为 - 你需要覆盖 layoutAttributesForElementsInRect:
和 layoutAttributesForItemAtIndexPath:
.
事实上,从您目前展示的代码来看,一开始就没有必要继承 UICollectionViewFlowLayout; 您所做的一切都可以通过设置布局属性来完成。但是要将完全对齐更改为左对齐,您确实需要子类化。
您甚至可以考虑编写自己的集合视图布局 而不是 作为 UICollectionViewFlowLayout 的子类,特别是因为月布局不是流布局 - 它始终由 7 个单元格组成,这不是流布局所做的。所以,在某种程度上,你的错误是认为你可以做到这一点而无需首先编写自己的布局。
虽然我有自己的自定义布局,但我的单元格仍然有一点间距。我试图在每行中放置 7 个项目,但我总是得到 6 个带有一堆间距的项目。
这是我的布局:
class monthFlow: UICollectionViewFlowLayout, UICollectionViewDelegateFlowLayout {
func collectionView(collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: collectionView.frame.size.width/7, height: collectionView.frame.size.height/8)
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
return 0
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
return 0
}
然而它看起来像这样:
这很正常。 UICollectionViewFlowLayout 的内置行为是 space 你的单元格在屏幕上均匀分布(完全合理)。如果你不想要那样,你将不得不做比你在 UICollectionViewFlowLayout 子类中做的更多的事情来改变行为 - 你需要覆盖 layoutAttributesForElementsInRect:
和 layoutAttributesForItemAtIndexPath:
.
事实上,从您目前展示的代码来看,一开始就没有必要继承 UICollectionViewFlowLayout; 您所做的一切都可以通过设置布局属性来完成。但是要将完全对齐更改为左对齐,您确实需要子类化。
您甚至可以考虑编写自己的集合视图布局 而不是 作为 UICollectionViewFlowLayout 的子类,特别是因为月布局不是流布局 - 它始终由 7 个单元格组成,这不是流布局所做的。所以,在某种程度上,你的错误是认为你可以做到这一点而无需首先编写自己的布局。