Swift 3中使用CGSize实现collectionView的100%宽度

3

我正在尝试使用Swift 3获取我的collectionView的100%宽度,但我感到困惑。我尝试的方法不起作用。到目前为止,我有:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: 100, height: 25)
}

任何想法?
3个回答

3
我认为您正在尝试实现以下内容:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: collectionView.frame.size.width, height: 25)
}

collectionView.frame.size.width将获取collectionView的宽度。

注意:传入的参数是点,不是百分比。因此,您返回的是100个点x 25个点。感谢@Randy的提醒!


2
是的,重要的是要指出 CGSize(width: 100, height: 25) 返回的是一个大小为 100 点 * 25 点的尺寸。它不接受百分比作为参数,而是点数。 - Randy
谢谢,这就是我需要的。 - Sole
但我想要无名英雄!好吧,决定权在我手中。@shallowThought 他可能读了我的个人简介:http://stackoverflow.com/users/5236226/caleb-kleveter?tab=profile - Caleb Kleveter
@CalebKleveter 哈哈。抱歉。 - shallowThought
@shallowThought 不要感到难过。这并不会对分数产生太大影响:https://data.stackexchange.com/stackoverflow/query/395337/how-unsung-am-i - Caleb Kleveter

2

我有一个自定义的UICollectionViewFlowLayout子类。请注意,您可能需要考虑插图等因素。

class AutoSizingCollectionViewFlowLayout: UICollectionViewFlowLayout {

  @IBInspectable var height: CGFloat = 0
  @IBInspectable var spacing: CGFloat = 0

  override func prepareLayout() {
    let containerBounds = (self.collectionView?.window != nil) ? self.collectionView?.bounds : UIScreen.mainScreen().bounds

    var size = self.itemSize
    size.width = CGRectGetWidth(containerBounds!)
    size.width -= (self.sectionInset.left + self.sectionInset.right)
    size.height = height
    self.itemSize = size

    self.minimumLineSpacing = spacing

    super.prepareLayout()
  }
}

1
使用此代码在Swift 4中:

var collectionWidth = collectionView.frame.size.width
if #available(iOS 11.0, *) {
    collectionWidth -= collectionView.safeAreaInsets.left + collectionView.safeAreaInsets.right
}

新 iPhone 的提示需要检查安全区域。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接