UICollectionViewCell和UICollectionView的高度相等

Luc*_*uke 15 ios uicollectionview swift

我怎么设置UICollectionView中单元格的高度等于集合视图的高度?下面的代码不起作用,因为此时似乎不知道集合视图高度,因为在此阶段自动布局正在弄乱属性.它导致单元格高度高于实际集合视图.

我会在解决这个问题的答案中加上300个赏金!

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

       return CGSize(width: 100, height: collectionView.frame.size.height)
    }
Run Code Online (Sandbox Code Playgroud)

2015-12-16 18:43:53.643 My-app [1055:434762]输入代码的行为hereUICollectionViewFlowLayout未定义,因为:2015-12-16 18:43:53.643 My-app [1055:434762]项目height必须小于UICollectionView的高度减去section insets top和bottom值,减去内容insets的top和bottom值.2015-12-16 18:43:53.643 My-app [1055:434762]请检查代表返回的值.2015-12-16 18:43:53.644 My-app [1055:434762]相关的UICollectionViewFlowLayout实例是,并附加到; layer =; contentOffset:{0,0}; contentSize:{3087,307}>集合视图布局:.2015-12-16 18:43:53.644 My-app [1055:434762]在UICollectionViewFlowLayoutBreakForInvalidSizes上创建一个符号断点,以便在调试器中捕获它.

基于hannads建议的解决方案.如果有更好的方法请告诉我

与财产观察员一起建造了一处房产.

var myCollectionViewHeight: CGFloat = 0.0 {
    didSet {
        if myCollectionViewHeight != oldValue {
            myCollectionView.collectionViewLayout.invalidateLayout()
            myCollectionView.collectionViewLayout.prepareLayout()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

覆盖此方法(多次调用)

override func viewDidLayoutSubviews() {
    myCollectionViewHeight = myCollectionView.bounds.size.height
}
Run Code Online (Sandbox Code Playgroud)

然后我在我的代表中有这个:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {            
            return CGSize(width: 100, height: myCollectionViewHeight)
    }
Run Code Online (Sandbox Code Playgroud)

han*_*nad 11

我就是这样做的.首先在视图控制器中添加一个全局变量,该变量将用于存储集合视图的高度.在该viewDidLayoutSubviews方法中,将此变量设置为collectionView的高度,如果更改,则调用方法以使UICollectionView布局无效

collectionView.collectionViewLayout.invalidateLayout()
Run Code Online (Sandbox Code Playgroud)

这将调用方法来设置collectionView单元格的大小,并在该方法中,将单元格的高度设置为包含collectionView高度的全局变量.

注意:目前在我的手机上并没有测试此代码.我可能错过了什么.


vie*_* vu 10

您尝试将此代码设置为viewDidLoad:

self.automaticallyAdjustsScrollViewInsets = false
Run Code Online (Sandbox Code Playgroud)

希望这有帮助!


Jac*_*nig 6

我已经在这个问题上苦苦挣扎了一个多星期,终于找到了适合我的具体情况的答案。我的问题是由于 1) 在 UICollectionViewCell 的图像中加载远程图像,以及 2) 估计的单元格大小大于我在集合视图布局的 sizeForItemAt 上手动设置的值。

在此输入图像描述

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: collectionView.bounds.width, height: collectionView.bounds.height)
}
Run Code Online (Sandbox Code Playgroud)

我能够通过将故事板上的单元格大小减小到低于我的单元格大小来解决,并且我还将“估计大小”设置为“无”(最后一部分可能就足够了)