Ios Swift 2-未定义UICollectionViewFlowLayout的行为,因为:

Ios Swift 2-未定义UICollectionViewFlowLayout的行为,因为:,ios,xcode,uicollectionview,swift2,Ios,Xcode,Uicollectionview,Swift2,我正在使用UICollectionrView来显示视频。一切正常,只是我得到一个警告说: 2015-10-30 14:00:39.893测试[6451:90574]试验对象的行为 未定义UICollectionViewFlowLayout,因为: 2015-10-30 14:00:39.893测试[6451:90574]项目宽度必须小于 大于UICollectionView的宽度减去左侧插入的部分 和右值,减去内容插入左值和右值 2015-10-30 14:00:39.893测试[6451:90

我正在使用UICollectionrView来显示视频。一切正常,只是我得到一个警告说:

2015-10-30 14:00:39.893测试[6451:90574]试验对象的行为 未定义UICollectionViewFlowLayout,因为:

2015-10-30 14:00:39.893测试[6451:90574]项目宽度必须小于 大于UICollectionView的宽度减去左侧插入的部分 和右值,减去内容插入左值和右值

2015-10-30 14:00:39.893测试[6451:90574]相关 UICollectionViewFlowLayout实例为,并已附加到;层=;contentOffset:{0,0};contentSize:{320,0}>集合 视图布局:

2015-10-30 14:00:39.894测试[6451:90574]在 UICollectionViewFlowLayoutBreakForInvalidSizes可在 调试器

仅当我在collectionView中重新加载数据时,此警告才会出现

我试图改变宽度,但警告仍然存在

我做错了什么

var UserVideosInfo = [[String]]()

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        NSNotificationCenter.defaultCenter().addObserver(self,
            selector: "reloadCollectionVideoView:",
            name: "ReloadCollectionVideoView",
            object: nil)   
    }

@objc func reloadCollectionVideoView(notification: NSNotification) {
        UserVideosInfo = NSUserDefaults.standardUserDefaults().objectForKey("UserVideosJSON") as! [[String]]
        print(UserVideosInfo)
        collectionView?.reloadData()

    }

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        if UserVideosInfo.count == 0 {
            return 0
        }else{
        return UserVideosInfo.count
        }

    }



    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        let videoCell = collectionView.dequeueReusableCellWithReuseIdentifier("VideoCell", forIndexPath: indexPath) as UICollectionViewCell
        let communityViewController = storyboard?.instantiateViewControllerWithIdentifier("community_id")

        videoCell.frame.size.width = (communityViewController?.view.frame.size.width)!
        videoCell.center.x = (communityViewController?.view.center.x)!

        return videoCell
    }

重新加载数据后,其中一个元素似乎超出了UICollectionView的大小。我在从一幅风景画到另一幅肖像画的旋转过程中遇到过这个警告,因为我的风景画单元格显然不适合放置在肖像画UICollectionView中

在重新加载数据之前,请尝试使当前布局无效:

self.collectionView.collectionViewLayout.invalidateLayout()
如果这不起作用,请尝试将单元格的宽度设置为特定的大小(例如300),然后从那里开始工作。您可能会发现,有些边距或边占用了您意想不到的空间,这就是您的元素大于UICollectionView宽度的原因。
如果是这种情况,请尝试将
self.collectionView.contentInset
设置为
UIEdgeInsetsZero
我仍在研究此错误,“uicollectionviewflowlayout未定义,因为”,我还无法找出解决方案(我会让您产生错误!),但我确实缩小了问题的原因,contentOffset设置为错误值并导致错误:

contentOffset:{0,-64}

我正在使用,我把它转换成Swift 3。只有在将包含AKPickerView的UIView嵌入到情节提要上的导航控制器(UINavigationController)中时,才会出现错误

因此,简单的临时解决方案只是一种解决方法,而不是将UIView嵌入导航控制器中。:)我稍后会回来,正确地纠正这一点,并找出为什么要为导航控制器而不是UIViewController触发UICollectionViewFlowLayout


如果有人在我之前有时间来解决这个问题,请提前感谢,非常感谢。

我在清除了所有版本并重建了项目后才遇到这个错误。我做了一些其他的更改,在此之前,一切都“正常”工作,或者至少看起来是这样(可能是因为视图被缓存了——不确定)

无论如何,我还有contentOffset:{0,-64},所以我仔细检查了约束,发现我的约束是在superview(导航控制器)上设置的,而不是在视图上设置的。我删除了superview的约束,并将它们重新添加到视图中。现在contentOffset为{0,0},错误消失了

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let videoCell = collectionView.dequeueReusableCellWithReuseIdentifier("VideoCell", forIndexPath: indexPath) as UICollectionViewCell 
(........)
}
您的UICollectionView门店名称collectionview是否与您在此处指定的相同

如果您在故事板中使用“UICollectionView”,则需要在此处使用为类中指定的插座名称。 例如:


我遇到了这个问题,但只有在iPhone 5S/iPhone SE上,布局无效才对我有效,谢谢!这篇文章解释了为什么会发生这种情况,并给出了解决方案:请不要用大写字母书写
let videoCell = myCollectionViewOutletName.dequeueReusableCellWithReuseIdentifier("VideoCell", forIndexPath: indexPath) as MyCollectionViewCellClassName