所有屏幕尺寸的CollectionView Cell动态高度

时间:2017-07-07 12:11:03

标签: swift3 uicollectionviewcell xcode8

在我的项目中,我的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()来实现它它也关注屏幕尺寸,但仍然有相同的问题。第一个图像是它应该出现的原始单元格。

original cell

下一张图片是它在滚动时切断右边缘的方式。最初我是静态numberofIteminSection并且每次滑动都会继续切割。这是第三次或第四次滑动的结果。我启用了分页,所以我不知道这里的问题是什么。

enter image description here

我已经检查了关于堆栈溢出的各种帖子,但似乎没有任何帮助,我被卡住了。任何帮助将非常感激。

1 个答案:

答案 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