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

Posted

技术标签:

【中文标题】在 Swift 3 中使用 CGSize 的 collectionView 的 100% 宽度【英文标题】:100% width of collectionView with CGSize in Swift 3 【发布时间】:2017-01-05 15:55:37 【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

我认为你正在努力做到这一点:

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 的提醒!

【讨论】:

是的,重要的是要指出CGSize(width: 100, height: 25) 返回的大小为 100 点 * 25 点。它不需要百分比作为参数,而是点。 谢谢,这正是我所需要的。 但我想要 Un-sung Hero! 好吧,我是决定的人之一。 @shallowThought 他可能读了我的简历:***.com/users/5236226/caleb-kleveter?tab=profile @CalebKleveter 哈哈。对不起。 @shallowThought 不要难过。它不会影响更多的分数:data.stackexchange.com/***/query/395337/…【参考方案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()
  

【讨论】:

【参考方案3】:

Swift 4 中使用此代码:

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

新 iPhone 轻推需要检查安全区域

【讨论】:

以上是关于在 Swift 3 中使用 CGSize 的 collectionView 的 100% 宽度的主要内容,如果未能解决你的问题,请参考以下文章

来自 Swift 的 CGRect 和 CGSize 扩展在 Objective-C 中不可见

来自 Swift 的 CGRect 和 CGSize 扩展在 Objective-C 中不可见

swift CGSize + Geometry.swift

swift CGSize + Pixel

ViewWillTransitionToSize 在 Swift 3 中出现故障?

iosswift照片在屏幕上剪切剪切