在 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 中不可见