UICollectionView中的单元格无法正确呈现

时间:2018-08-08 11:34:47

标签: ios swift uicollectionviewcell

我是iOS和Swift的新手,我正在尝试首次创建UICollectionView。 运行我的作品时,有些事情不太正确。这是我的故事板中的样子:

Storyboard Cell

但是当我跑步时:

Simulator

顶部的灰色区域变得比以前更长,并且单元的底部似乎被剪切了。我只写了几行代码以使单元格的高度等于集合视图的高度。

let height = collectionView.frame.height
cell.frame.size.height = height
return cell

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

请使用collectionViewLayout给出商品的尺寸,

class YourController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let height = collectionView.frame.height
    let width = UIScreen.main.bounds.width / 3
    let size = CGSize(width: width, height: height)
    return size
}

答案 1 :(得分:1)

要更改集合视图中的高度,请不要更改单元格框架的高度。集合视图还有另一个委托可以设置单元格的高度和宽度。

extension ViewControll : UICollectionViewDelegateFlowLayout {
  func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
    {
        return CGSize(width: anyWidth, height: collectionView.frame.size.height)
    }
}

在这里,anyWidth表示您放置的宽度。由你决定

答案 2 :(得分:1)

您可以从情节提要或代码中进行更改。如图所示,我已经从情节提要中完成了。

enter image description here

并在您的视图控制器中编写此方法,以为项目提供尺寸。为此,您需要在视图控制器中继承UICollectionViewDelegateFlowLayout方法。

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

      let size = collectionView.frame.width / 3
      return CGSize(width: size - 20, height: size - 20 )
 }

注意:这仅是示例。您可以设置收藏夹视图单元格框架。

答案 3 :(得分:1)

Swift 4代码在这里

1)取消选中属性检查器中行高自动字段。

2)然后设置委托函子

extension ViewController : UICollectionViewDelegateFlowLayout {
  func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    var width = CGFloat(80)  //change "80" with your cell width

    return CGSize(width: width ,height : self.collectionView.frame.height)
 }
}