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

cclgggtu  于 2022-11-06  发布在  Swift
关注(0)|答案(4)|浏览(226)

我正在使用UICollectionrView来显示视频。一切都正常,除了我得到一个警告说:
2015-10-30 14:00:39.893测试[6451:90574]未定义UICollectionViewFlowLayout的行为,原因如下:
2015-10-30 14:00:39.893 test[6451:90574]项目宽度必须小于UICollectionView的宽度减去部分插入左侧和右侧值,减去内容插入左侧和右侧值。
2015-10-30 14:00:39.893 test[6451:90574]相关的UICollectionViewFlowLayout示例为,并将其附加到;图层= ;内容偏移量:{0,0};内容大小:{320,0}〉收藏视图布局:。
2015-10-30 14:00:39.894 test[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
    }
hc8w905p

hc8w905p1#

在重新加载数据后,似乎有一个元素超出了UICollectionView的大小。我在从横向旋转到纵向时遇到过此警告,其中我的横向单元格显然不适合纵向UICollectionView。
在重新加载数据之前,请尝试使当前布局无效:

self.collectionView.collectionViewLayout.invalidateLayout()

如果这样做不起作用,请尝试将单元格的宽度设置为特定大小(例如300),然后从该大小开始。您可能会发现,某些边距或边缘占用了您不希望的空间,这就是为什么您的元素大于UICollectionView的宽度。如果是这种情况,请尝试将self.collectionView.contentInset设置为UIEdgeInsetsZero

5us2dqdw

5us2dqdw2#

我仍在研究这个错误,“uicollectionviewflowlayout是没有定义,因为。”我不能找出解决方案,还(我会得到你的错误!),但我确实缩小了到底是什么导致我的问题,contentOffset是设置了错误的值,并导致错误:
内容偏移量:{0,-64};
我使用的是AKPickerView-Swift,我将其转换为Swift 3。只有当我将包含AKPickerView的UIView嵌入到故事板上的导航控制器(UINavigationController)中时,我才会收到错误。
因此,这是一个简单的***临时***解决方案,只是一个变通办法,不要将UIView嵌入到导航控制器中。:)我稍后会回来并正确更正此问题,并找出为什么为导航控制器而不是UIViewController触发UICollectionViewFlowLayout。
如果有人有空闲时间来弄清楚它之前,我这样做,提前感谢,这是非常感谢。

r55awzrz

r55awzrz3#

我刚刚得到这个错误后,我清除了所有的建设和重建项目。我已经做了几个其他的变化,在此之前,一切都是工作“正确”,或至少它似乎是(也许是由于视图被缓存不知何故-不确定)。
无论如何,我还有contentOffset:{0,-64},因此我仔细检查了约束,发现我的约束是在超级视图(导航控制器)上设置的,而不是在视图上设置的。我删除了对超级视图的约束,然后重新将它们添加到视图中。现在contentOffset为{0,0},错误已消失。

zwghvu4y

zwghvu4y4#

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let videoCell = collectionView.dequeueReusableCellWithReuseIdentifier("VideoCell", forIndexPath: indexPath) as UICollectionViewCell 
(........)
}

您的UICollectionView插座名称集合视图是否与您在此处指定的内容相同???
如果你在故事板中使用的是“UICollectionView”,那么在类中为它指定的插座名称应该需要在这里使用。例如:

let videoCell = myCollectionViewOutletName.dequeueReusableCellWithReuseIdentifier("VideoCell", forIndexPath: indexPath) as MyCollectionViewCellClassName

相关问题