gpt4 book ai didi

Swift collectionview 幻灯片上的幻灯片对齐

转载 作者:行者123 更新时间:2023-11-30 11:02:18 25 4
gpt4 key购买 nike

我想要 CollectionView 的视觉美感,但我遇到了对齐问题。我与你分享。页面首次加载时没有问题。

one image

当我滚动到 Collection View 时,出现了一些变化。

two image

我想要的是collectionview横向移动并且对齐方式没有改变,但是我已经很努力地寻找解决方案了。我与您分享我的代码。

    override func awakeFromNib() {
super.awakeFromNib()
self.celloectionCat.delegate = self
self.celloectionCat.dataSource = self
self.celloectionCat?.register(UINib(nibName: "mycell", bundle: nil), forCellWithReuseIdentifier: "mycell")
self.celloectionCat.showsHorizontalScrollIndicator = false
self.celloectionCat.showsVerticalScrollIndicator = false
self.celloectionCat.isPagingEnabled = true;
self.celloectionCat.alwaysBounceVertical = false

}


extension Cell : UICollectionViewDelegateFlowLayout{

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let padding: CGFloat = 45.0
let hpadding: CGFloat = 15.0
let collectionViewWidthSize = collectionView.frame.size.width - padding
let collectionViewHeightSize = collectionView.frame.size.height - hpadding

return CGSize(width: collectionViewWidthSize / 2 , height: collectionViewHeightSize / 2 )
}

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

最佳答案

这是因为启用分页后, Collection View 将在 Collection View 大小的倍数处停止内容 View 。

解决您的问题的一种方法是将单元格分成几个部分,具体来说,每页一个部分,每个部分(最多)四个单元格。如果您正确设置了部分插入,那么一个部分将是 Collection View 的大小,并且单元格将在该部分的中心对齐。

这是您的代码,略有更改。我使用了硬编码数字,但我建议不要在代码中这样做(另外,您应该考虑将单元格大小计算移出 sizeForItem 方法,因为这将被多次调用,但大小不会改变)。

@IBOutlet weak var collectionView: UICollectionView! {
didSet {
collectionView.dataSource = self
collectionView.delegate = self
collectionView.showsHorizontalScrollIndicator = false
collectionView.showsVerticalScrollIndicator = false
collectionView.isPagingEnabled = true
}
}

func numberOfSections(in collectionView: UICollectionView) -> Int {
return 10
}

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

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell identifier", for: indexPath)
// setup your cell

return cell
}


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let padding: CGFloat = 45.0
let hpadding: CGFloat = 15.0
let collectionViewWidthSize = collectionView.frame.size.width - padding
let collectionViewHeightSize = collectionView.frame.size.height - hpadding

return CGSize(width: collectionViewWidthSize / 2 , height: collectionViewHeightSize / 2 )
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat
{
return 15
}

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

关于Swift collectionview 幻灯片上的幻灯片对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53194171/

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