两者有什么区别?
collectionViewController.collectionViewLayout.collectionViewContentSize()和collectionViewController.collectionView.contentSize?
你喜欢用什么?
发布于 2014-08-15 22:38:27
collectionViewContentSize()是一种可以覆盖(在布局中)来动态生成大小的方法。
contentSize是collectionView (或任何UIScrollView的属性)的一个属性,如果没有这样的覆盖,它将被使用。
它类似于UITableView的rowHeight和UITableViewDelegate的heightForRowAtIndexPath()。
还请注意(如注释中提到的),"contentSize是UIScrollView-inherited属性,而itemSize是UICollectionViewLayout上允许为每个单元格指定毯子大小的属性“。
发布于 2015-08-18 11:32:36
contentSize是UIScrollView的一个属性,而collectionViewContentSize()是UICollectionViewLayout的一个方法。
在阅读编程iOS 7,第4版,同时总结UICollectionViewLayout时,作者说:
集合视图的布局工作马类。如果没有布局实例,集合视图就不可能存在!正如我已经说过的,布局知道所有子视图占用多少空间,提供了设置集合视图的contentSize的collectionViewContentSize,即qua滚动视图。
从个人经验来看,我在使用layout.collectionViewContentSize()时遇到了困难。控制台显示下面的警告,或者布局最初看起来不正确。
the behavior of the UICollectionViewFlowLayout is not defined because: the item height must be less than the height of the UICollectionView minus the section insets top and bottom values.我猜collectionViewContentSize()所做的不仅仅是返回内容大小。我认为调用它实际上启动了布局计算。如果--在这些计算过程中--检测到异常,那么所显示的警告就是输出。
对于我来说,在iPad上进行测试并通过Xib启动集合视图,Xib的帧是iPhone大小的。从viewDidLayoutSubviews触发的初始通行证处理的是小视图。检查集合视图的框架,它太小了。随后的布局引擎通行证最终提供了正确的大小,但那时已经显示了警告。
接下来,我尝试使Xib框架更大。这消除了错误,但造成了更严重的问题;布局最初是错误的。在滚动中,当布局被重新计算到正确的维度时,您会看到项目跳跃。
答案可能是打电话给invalidateLayout(),但我不确定在哪里。在实例化集合视图之后,我尝试了一下,但没有成功。
那么答案呢?我用了contentSize.viewDidLayoutSubviews中的初始传递仍然显示出不正确的大小,但最终还是好的。它不会产生任何控制台警告,更好的是,不会触发基于旧框架大小的任何错误布局。更好的是,旋转是自动处理的,因为viewDidLayoutSubviews将被自动调用,此时内容大小将被更新。
https://stackoverflow.com/questions/25333294
复制相似问题