UICollectionView布局问题

我正在使用stream布局使用UICollectionView 。 我做了一个自定义的UICollectionViewCell相同。 但是在运行这个项目时,控制台一直在抛出这个错误,

UICollectionViewFlowLayout的行为没有定义,因为:项目的高度必须小于UICollectionView的高度减去顶部和底部的值。

我已经确定单元格的大小是正确的

有没有人能够解决这个问题。 提前致谢。

问候Nitesh

我发现,使用storyboards ,你必须进入storyboard ,点击整个View Controller (视图应该用蓝色突出显示),然后转到Attributes Inspector (屏幕右侧的第四个选项卡)并取消选中“在顶下酒吧”,“在底下酒吧”和“在不透明的酒吧之下”。 这为我解决了这个问题,并为我的同事清除了这个问题。

使用集合视图呈现全屏视图控制器时,我遇到了一些问题。

基本上在运行时,它会询问项目的大小,并简单地返回集合视图的大小:

 -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return self.collectionView.frame.size; } 

尝试使用全屏单元格创build集合视图时,自己有几次这个问题。 我的问题是由IB / Storyboard中的4“屏幕布局,并指定320 * 568的项目大小,但运行在模拟器使用3.5”屏幕,其高度为480.解决scheme是指定您的项目大小在代码如下所示:

 UICollectionViewFlowLayout *layout = (id) self.collectionView.collectionViewLayout; layout.itemSize = self.collectionView.frame.size; 

这确保在运行时正确设置单元大小。

我知道这是一个非常晚的答复,但我也经历了这个。

在我的视图控制器,我们称之为MyViewController我有一个使用自定义UICollectionViewCell 。 我正在实现的方法collectionView:layout:sizeForItemAtIndexPath在那里我返回一个项目的大小取决于UICollectionView的高度。

MyViewController是在故事板中使用自动布局来控制UIViewController的高度。

单元格在纵向模式下看起来很好,但在横向模式下没有。

我通过viewWillLayoutSubviews方法中的UICollectionViewLayoutUICollectionView无效解决了我的问题。

 - (void)viewWillLayoutSubviews { [self.myCollectionView.collectionViewLayout invalidateLayout]; } 

早些时候,我试图使willAnimateRotationToInterfaceOrientation:duration内的布局无效,但它不起作用。 原因可能是所有视图的大小都没有计算出来,所以我们必须等到autolayout完成它的魔术。 我参考这个SO线程 。

如果你正在使用故事板和自动布局,debugging这种问题真的很难…

尝试在iPhone上显示UICollectionViewCell全屏时,我遇到了类似的问题。

大部分时间问题是与单元格的大小设置

 -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *) 

或者直接在flowLayout.itemSize上。

但是…试试:

  1. selectViewController:

选择视图控制器

  1. 然后取消选中Extend Edges选项:

禁用扩展边缘选项

现在尝试设置自动布局约束。

祝你好运。

这解决了我的问题:

 -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return CGSizeMake(self.collectionView.frame.size.width, self.collectionView.frame.size.height - 70); } 

你可以在这个屏幕上看到从上到下的填充值:

在这里输入图像说明

一定要为UICollectionView和UICollectionviewcell设置正确的自动调整掩码。 这解决了我的问题iPhone 4模拟器

对我来说,我在自定义的UIView里面使用了AKPickerView,它给了我一些警告,比如这里提到的警告。 我所做的消除警告的方法是取消选中属性检查器中的“AutoResize Subviews”框,以查看我的自定义UIView。 那个警告声如此沉重,我以为我的logging器停止了工作。

在这里输入图像说明

我只是遇到了同样的错误消息,但对我来说,问题是,当我从API接收到新的数据,并试图刷新我的collectionView,调用[collectionView reloadData]的方法不是在主线程上调用它。

希望这可以帮助别人…

我有同样的问题

没有定义UICollectionViewFlowLayout的行为,因为:项目高度必须小于UICollectionView的高度减去顶部和底部的值。

我解决了这个问题,通过检查部分Insets.And和我已经使用下面的代码修复单元格大小的值。

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ CGSize result = [[UIScreen mainScreen] bounds].size; CGFloat scale = [UIScreen mainScreen].scale; result = CGSizeMake(result.width * scale, result.height * scale); CGFloat cellWidth = [[UIScreen mainScreen] bounds].size.width - 20; CGFloat cellHeight = [[UIScreen mainScreen] bounds].size.height - 120; return CGSizeMake(cellWidth, cellHeight); } 

如果通过容器视图+ UICollectionViewController加载collectionView,则可能在容器视图上设置了高度约束,这限制了集合视图本身的高度。 在我的情况下,我发现collectionView.contentSize比我在容器视图上设置的约束更高。

显然这是一个边缘的情况下,但万一你有类似的设置,我想我会添加此评论。

上述修复无一为我所用。 我用这个固定它

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {CGFloat currentWidth = collectionView.frame.size.width; UIEdgeInsets sectionInset = [(UICollectionViewFlowLayout *)collectionView.collectionViewLayout sectionInset]; //here the sectionInsets are always = 0 because of a timing issue so you need to force set width of an item a few pixels less than the width of the collectionView. CGFloat width = currentWidth - 10; }