我正在使用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
}
4条答案
按热度按时间hc8w905p1#
在重新加载数据后,似乎有一个元素超出了UICollectionView的大小。我在从横向旋转到纵向时遇到过此警告,其中我的横向单元格显然不适合纵向UICollectionView。
在重新加载数据之前,请尝试使当前布局无效:
如果这样做不起作用,请尝试将单元格的宽度设置为特定大小(例如300),然后从该大小开始。您可能会发现,某些边距或边缘占用了您不希望的空间,这就是为什么您的元素大于UICollectionView的宽度。如果是这种情况,请尝试将
self.collectionView.contentInset
设置为UIEdgeInsetsZero
5us2dqdw2#
我仍在研究这个错误,“uicollectionviewflowlayout是没有定义,因为。”我不能找出解决方案,还(我会得到你的错误!),但我确实缩小了到底是什么导致我的问题,contentOffset是设置了错误的值,并导致错误:
内容偏移量:{0,-64};
我使用的是AKPickerView-Swift,我将其转换为Swift 3。只有当我将包含AKPickerView的UIView嵌入到故事板上的导航控制器(UINavigationController)中时,我才会收到错误。
因此,这是一个简单的***临时***解决方案,只是一个变通办法,不要将UIView嵌入到导航控制器中。:)我稍后会回来并正确更正此问题,并找出为什么为导航控制器而不是UIViewController触发UICollectionViewFlowLayout。
如果有人有空闲时间来弄清楚它之前,我这样做,提前感谢,这是非常感谢。
r55awzrz3#
我刚刚得到这个错误后,我清除了所有的建设和重建项目。我已经做了几个其他的变化,在此之前,一切都是工作“正确”,或至少它似乎是(也许是由于视图被缓存不知何故-不确定)。
无论如何,我还有contentOffset:{0,-64},因此我仔细检查了约束,发现我的约束是在超级视图(导航控制器)上设置的,而不是在视图上设置的。我删除了对超级视图的约束,然后重新将它们添加到视图中。现在contentOffset为{0,0},错误已消失。
zwghvu4y4#
您的UICollectionView插座名称集合视图是否与您在此处指定的内容相同???
如果你在故事板中使用的是“UICollectionView”,那么在类中为它指定的插座名称应该需要在这里使用。例如: