我想在我的collectionView单元格中拥有动态宽度和高度,所以每个屏幕只有2个单元格。从顶部,左侧,右侧和它们之间10px。
示例:
如果我有320px的宽度(屏幕)我想要每个单元格145px,所以它会 左起10px +145(单元格)+ 10px + 145(第二单元格)+ 10px右起。
答案 0 :(得分:2)
使您的控制器符合UICollectionViewDelegateFlowLayout
协议并实施方法:
import UIKit
class ViewController: UIViewController
{
let numberOfCells = 9
let kCellHeight : CGFloat = 100
let kLineSpacing : CGFloat = 10
let kInset : CGFloat = 10
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad()
{
super.viewDidLoad()
}
}
extension ViewController : UICollectionViewDataSource
{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
return numberOfCells
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "sampleCell", for: indexPath)
return cell
}
}
extension ViewController : UICollectionViewDelegateFlowLayout
{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
return CGSize(width: (UIScreen.main.bounds.width - 2*kInset - kLineSpacing)/2, height: kCellHeight)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat
{
return kLineSpacing
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets
{
return UIEdgeInsets(top: kInset, left: kInset, bottom: kInset, right: kInset)
}
}
以下是附件截图:
答案 1 :(得分:1)
您可以使用stackviews,也可以设置单元格的宽度约束并将其拖动到代码中,将常量设置为半屏尺寸。
当你有:
时,为什么你直接在单元格上使用约束?func collectionView(collectionView : UICollectionView,layout collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath) -> CGSize
{
return CGSizeMake(width ,height);
}
答案 2 :(得分:0)
使用以下代码:
func collectionView(collectionView:UICollectionView,layout collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath) - > CGSize { let width =(screenSize.width - 30)/ 2 let height = width * aspectRatio // aspectRatio - someValue或将height作为常量 返回CGSizeMake(宽度,高度) }
这对我有用..