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
方法中的UICollectionViewLayout
的UICollectionView
无效解决了我的问题。
- (void)viewWillLayoutSubviews { [self.myCollectionView.collectionViewLayout invalidateLayout]; }
早些时候,我试图使willAnimateRotationToInterfaceOrientation:duration
内的布局无效,但它不起作用。 原因可能是所有视图的大小都没有计算出来,所以我们必须等到autolayout完成它的魔术。 我参考这个SO线程 。
如果你正在使用故事板和自动布局,debugging这种问题真的很难…
尝试在iPhone上显示UICollectionViewCell全屏时,我遇到了类似的问题。
大部分时间问题是与单元格的大小设置
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)
或者直接在flowLayout.itemSize上。
但是…试试:
- selectViewController:
- 然后取消选中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; }
- 如何通过推送通知
- 笔尖,但没有得到一个UITableView
- 在reloadItemsAtIndexPaths之后避免UICollectionView的animation
- iOS Autolayout – 如何在视图之间设置两个不同的距离取决于屏幕高度
- shouldAutorotateToInterfaceOrientation不适用于iOS 6
- 如何在iOS 6中设置UIActivityViewController的收件人?
- 用GCDasynchronous下载UITableView的图像
- 重新sortingUICollectionView的单元格
- 支持的方向与应用程序没有共同的方向,而且应该是返回YES'