如何在Swift中以编程方式更改UICollectionViewCell大小?

我有一个segmented control UICollectionView切换数据。 但是,如何以编程方式更改UICollectionViewCell大小属性? 那么我可以为每种数据types适当地定制每种风格。

例如,将宽度更改为520,将高度更改为100.我是iOS开发新手,对CSS有经验:/

我知道如何在Xcode(显然)做到这一点,但不知道正确的方法来迅速改变它。 任何想法或反馈非常赞赏(Y)

在这里输入图像说明

 //Use for size func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { } //Use for interspacing func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat { return 1.0 } func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat { return 1.0 } 

//快速3

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { return 1.0 } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { return 1.0 } 

Swift 3

来自@ sumit-oberoi答案的方法将不会被调用,如果你正在使用斯威夫特3.为了使其工作进行调整:

  1. 符合UICollectionViewDelegateFlowLayout协议。

  2. 实现这些方法:

     func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { return 1.0 } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { return 1.0 } 

注意这些变化:

  1. 在方法名称中的collectionView之前添加_
  2. NSIndexPath更改为IndexPath

Swift 3

 override func viewDidLoad() { super.viewDidLoad() let cellSize = CGSize(width:80 , height:80) let layout = UICollectionViewFlowLayout() layout.scrollDirection = .vertical //.horizontal layout.itemSize = cellSize layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1) layout.minimumLineSpacing = 1.0 layout.minimumInteritemSpacing = 1.0 myCollectionView.setCollectionViewLayout(layout, animated: true) myCollectionView.reloadData() } 

如果你使用Gaurav Rami的代码波纹pipe

 let cellSize = CGSize(width:80 , height:80) let layout = UICollectionViewFlowLayout() layout.scrollDirection = .vertical //.horizontal layout.itemSize = cellSize layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1) layout.minimumLineSpacing = 1.0 layout.minimumInteritemSpacing = 1.0 myCollectionView.setCollectionViewLayout(layout, animated: true) 

并得到这个消息“ 快照一个未呈现的视图会导致一个空的快照,确保你的视图在屏幕更新之前已经被渲染了至less一次快照或者快照。 ”当你设置集合视图的视图布局时,你应该去掉animation

 myCollectionView.setCollectionViewLayout(layout, animated: false) 

那么这个消息就会消失