在我的项目中,我的collectionview单元格包含整个屏幕的宽度和高度,我将其设置为水平滚动并使其对所有屏幕显示都是动态的,我正在使用此方法
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let height: CGFloat = view.frame.size.height
let width: CGFloat = view.frame.size.width
return CGSize(width: collectionView.bounds.size.width, height: collectionView.bounds.size.height)
它的工作非常精细并且照顾所有屏幕尺寸的宽度和高度,但问题是在滚动它是从右边缘切割屏幕时,我尝试使用uicollectionviewdelegateflowlayout的不同方法viewDidLayoutSubViews()来实现它它也关注屏幕尺寸,但仍然有相同的问题。第一个图像是它应该出现的原始单元格。
下一张图片是它在滚动时切断右边缘的方式。最初我是静态numberofIteminSection并且每次滑动都会继续切割。这是第三次或第四次滑动的结果。我启用了分页,所以我不知道这里的问题是什么。
我已经检查了关于堆栈溢出的各种帖子,但似乎没有任何帮助,我被卡住了。任何帮助将非常感激。
答案 0 :(得分:0)
您需要检查sizeForItemAtIndexPath
中的屏幕尺寸,如:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let screenSize: CGRect = UIScreen.main.bounds
let screenWidth = screenSize.width
if screenWidth == 414{
return CGSize(width: collectionViewTable.bounds.size.width - 4, height: collectionViewTable.bounds.size.height - 50)
}else if screenWidth == 375{
return CGSize(width: collectionViewTable.bounds.size.width - 4, height: collectionViewTable.bounds.size.height - 50)
}else{
return CGSize(width: collectionViewTable.bounds.size.width - 4, height: collectionViewTable.bounds.size.height - 50 )
}
}
还可以添加这些功能并根据您的需要进行自定义:
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsetsMake( 5, 14, 5, 14)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
return 4;
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
return 4;
}
如果这不起作用,请在UIEdgeInsetsMake
中更改insetForSectionAt
。