如何在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.为了使其工作进行调整:
-
符合
UICollectionViewDelegateFlowLayout
协议。 -
实现这些方法:
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 }
注意这些变化:
- 在方法名称中的
collectionView
之前添加_
-
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)
那么这个消息就会消失