【问题标题】:Swift 2 - the behavior of the UICollectionViewFlowLayout is not defined because:Swift 2 - UICollectionViewFlowLayout 的行为未定义,因为:
【发布时间】:2016-01-30 23:56:17
【问题描述】:

我正在使用 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 测试[6451:90574] 相关 UICollectionViewFlowLayout 实例是,并且它附加到;层 = ;内容偏移:{0, 0}; contentSize: {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
    }

【问题讨论】:

标签: ios xcode uicollectionview swift2


【解决方案1】:

在您重新加载数据后,您的某个元素看起来超出了 UICollectionView 的大小。我在从横向旋转到纵向时出现了这个警告,我的横向单元格显然不适合纵向 UICollectionView。

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

self.collectionView.collectionViewLayout.invalidateLayout()

如果这不起作用,请尝试将单元格的宽度设置为特定大小(例如 300)并从那里开始工作。您可能会发现有一些边距或边缘占用了您没有预料到的空间,这就是为什么您的元素大于 UICollectionView 的宽度的原因。 如果是这种情况,请尝试将self.collectionView.contentInset 设置为UIEdgeInsetsZero

【讨论】:

  • 我遇到了这个问题,但仅在 iPhone 5S/iPhone SE 上并且使布局无效对我有用,谢谢!
【解决方案2】:

我仍在研究此错误,“uicollectionviewflowlayout 未定义,因为。”而且我还无法弄清楚解决方案(我会得到你的错误!),但我确实缩小了导致我的问题的确切范围,contentOffset 设置为错误值并导致错误:

contentOffset: {0, -64};

我正在使用AKPickerView-Swift,我将其转换为 Swift 3。当我将包含 AKPickerView 的 UIView 嵌入故事板上的导航控制器 (UINavigationController) 时,我才会收到错误。

所以简单的临时解决方案只是一种变通方法,不要将 UIView 嵌入到导航控制器中。 :) 我稍后会回来并正确纠正这个问题,并弄清楚为什么 UICollectionViewFlowLayout 被导航控制器而不是 UIViewController 触发。

如果有人在我做之前有空闲时间解决这个问题,提前致谢,非常感谢。

【讨论】:

    【解决方案3】:

    在清除所有构建并重建项目后,我刚刚收到此错误。我进行了其他一些更改,在此之前一切都“正常”工作,或者至少看起来是(可能是由于视图以某种方式被缓存 - 不确定)。

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

    【讨论】:

      【解决方案4】:
      override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
      let videoCell = collectionView.dequeueReusableCellWithReuseIdentifier("VideoCell", forIndexPath: indexPath) as UICollectionViewCell 
      (........)
      }
      

      您的 UICollectionView 出口名称 collectionview 是否与您在此处指定的一样???

      如果您在情节提要中使用“UICollectionView”,则应在此处使用为该类指定的插座名称。 示例:

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

      【讨论】:

      • 请不要用大写字母写
      猜你喜欢
      • 2020-03-13
      • 2015-12-16
      • 2015-11-11
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多