如何在UICollectionView Swift 4.0中正确调整和扩展单元格的大小和居中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在UICollectionView Swift 4.0中正确调整和扩展单元格的大小和居中相关的知识,希望对你有一定的参考价值。
请注意,我已经在互联网上搜索过,并没有找到适合大小和居中单元的地方。我尝试自己做,但我一直在运行我无法避免的错误。我是Swift的新手。我的代码:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath:IndexPath) -> CGSize {
let cellWidth = collectionView.frame.size.width / 7.0
let cellHeight = collectionView.frame.height - 4.0
let imageSideLength = cellWidth < cellHeight ? cellWidth : cellHeight
return CGSize(width: imageSideLength, height: imageSideLength)
}
//centers the cells
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
// Make sure that the number of items is worth the computing effort.
guard let flowLayout = collectionViewLayout as? UICollectionViewFlowLayout,
let dataSourceCount = photoCollectionView.dataSource?.collectionView(photoCollectionView, numberOfItemsInSection: section),
dataSourceCount > 0 else {
return .zero
}
let cellCount = CGFloat(dataSourceCount)
let itemSpacing = flowLayout.minimumInteritemSpacing
let cellWidth = flowLayout.itemSize.width + itemSpacing
let cellHeight = flowLayout.itemSize.height
var insets = flowLayout.sectionInset
// Make sure to remove the last item spacing or it will
// miscalculate the actual total width.
let totalCellWidth = (cellWidth * cellCount) - itemSpacing
let contentWidth = collectionView.frame.size.width - collectionView.contentInset.left - collectionView.contentInset.right
let contentHeight = collectionView.frame.size.height
// If the number of cells that exist take up less room than the
// collection view width, then center the content with the appropriate insets.
// Otherwise return the default layout inset.
guard totalCellWidth < contentWidth else {
return insets
}
// Calculate the right amount of padding to center the cells.
let padding = (contentWidth - totalCellWidth) / 2.0
insets.left = padding
insets.right = padding
insets.top = (contentHeight - cellHeight) / 2.0
//insets.bottom = (contentHeight - cellHeight) / 2.0
return insets
}
}
我尝试使用两个独立的功能:第一个用于调整单元格,第二个用于使单元格居中。 (注意我只希望新单元格水平扩展,最多6个单元格。)但是,我在第二个函数中计算单元格高度和宽度与我在第一个函数中设置它的方式不一致,设置了一个链的问题。任何有关如何确定单元格大小和居中的见解,以便我可以在我的屏幕上水平放置1-6个单元格,这将是很好的。
您的布局调用是冲突的。试试关注THIS Tutorial to get the hang of it.
否则一个好的答案是HERE
var flowLayout: UICollectionViewFlowLayout {
let _flowLayout = UICollectionViewFlowLayout()
// edit properties here
_flowLayout.itemSize = CGSize(width: 98, height: 134)
_flowLayout.sectionInset = UIEdgeInsetsMake(0, 5, 0, 5)
_flowLayout.scrollDirection = UICollectionViewScrollDirection.horizontal
_flowLayout.minimumInteritemSpacing = 0.0
// edit properties here
return _flowLayout
}
设置为:
self.collectionView.collectionViewLayout = flowLayout // after initializing it another way
// or
UICollectionView(frame: .zero, collectionViewLayout: flowLayout)
以上是关于如何在UICollectionView Swift 4.0中正确调整和扩展单元格的大小和居中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 中使用 @resultbuilder 使用 UICollectionView?
Swift - UICollectionView:如何在标题中自动布局标签间距
Swift:如何在 UITableViewController(包含 UICollectionView)中使用“didSelectItemAtIndexPath”?
如何在 UICollectionView、Swift 5、Xcode 的行下添加行
如何在 Swift3.0 中居中对齐 UICollectionView 的单元格?
如何从嵌入在 UITableViewCell (Swift) 中的 UICollectionView 的单元格中分离出来?