gpt4 book ai didi

swift - 如何在 Swift 的 UICollectionViewCell 中将图像显示到中心

转载 作者:搜寻专家 更新时间:2023-11-01 05:33:59 25 4
gpt4 key购买 nike

我想将图像显示到中心,在 UICollectionView 中,当我移动到第二个项目时,第一个项目显示图像居中,这个项目不居中

  let itemsPerRow:CGFloat = 1
var sectionInsets = UIEdgeInsets(top: 20.0, left: 20.0, bottom: 20.0, right: 20.0)
var productImage = [String]()


func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return productImage.count
}

func collectionView(_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ProductInfoDetailCell", for: indexPath) as! ProductInfoDetailCell
cell.productLargeImageView.image = UIImage(named: productImage[indexPath.row])
//cell.productLabel.text = productTitle[indexPath.row]
return cell
}




func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

let paddingSpace = (sectionInsets.left ) * (itemsPerRow + 1)
let availableWidth = collectionView.frame.size.width - paddingSpace
let widthPerItem = availableWidth / itemsPerRow
return CGSize(width: widthPerItem , height: 400)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return sectionInsets
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {

return sectionInsets.left

}

第一张图片,项目居中-

first Image, Item is centred

第二张图片,项目未居中

second image, item is not centred

我也在UICollectionView中使用水平滚动和分页

最佳答案

您需要使用自定义 UICollectionViewFlowLayout 来实现您的要求。

1.创建UICollectionViewFlowLayout的子类

class CustomCollectionViewFlowLayout: UICollectionViewFlowLayout
{
override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint
{
if let collectionViewBounds = self.collectionView?.bounds
{
let halfWidthOfVC = collectionViewBounds.size.width * 0.5
let proposedContentOffsetCenterX = proposedContentOffset.x + halfWidthOfVC
if let attributesForVisibleCells = self.layoutAttributesForElements(in: collectionViewBounds)
{
var candidateAttribute : UICollectionViewLayoutAttributes?
for attributes in attributesForVisibleCells
{
let candAttr : UICollectionViewLayoutAttributes? = candidateAttribute
if candAttr != nil
{
let a = attributes.center.x - proposedContentOffsetCenterX
let b = candAttr!.center.x - proposedContentOffsetCenterX
if fabs(a) < fabs(b)
{
candidateAttribute = attributes
}
}
else
{
candidateAttribute = attributes
continue
}
}

if candidateAttribute != nil
{
return CGPoint(x: candidateAttribute!.center.x - halfWidthOfVC, y: proposedContentOffset.y);
}
}
}
return CGPoint.zero
}
}

2.storyboard 中将 Collection View Flow Layout 类设置为 CustomCollectionViewFlowLayout

enter image description here

关于swift - 如何在 Swift 的 UICollectionViewCell 中将图像显示到中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45913637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com