有什么区别
collectionViewController.collectionViewLayout.collectionViewContentSize()
和 collectionViewController.collectionView.contentSize
?
你喜欢用什么?
最佳答案
contentSize
是 UIScrollView
的属性,而 collectionViewContentSize()
是 UICollectionViewLayout
的一种方法.
阅读 Programming iOS 7, 4th Edition ,同时总结UICollectionViewLayout
,作者指出:
The layout workhorse class for a collection view. A collection view cannot exist without a layout instance! As I’ve already said, the layout knows how much room all the subviews occupy, and supplies the collectionViewContentSize that sets the contentSize of the collection view, qua scroll view.
根据个人经验,我在使用 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 启动 Collection View 时,Xib 的框架是 iPhone 大小的。从 viewDidLayoutSubviews
触发的初始通行证正在处理小 View 。检查 Collection View 的框架,它太小了。随后的布局引擎 channel 最终交付了正确的尺寸,但到那时警告已经显示。
接下来,我尝试使 Xib 框架变得更大。这避免了错误,但导致了更严重的问题;布局最初是错误的。在滚动过程中,您会看到项目随着布局重新计算为正确的尺寸而跳来跳去。
可能答案是调用 invalidateLayout()
,但我不确定在哪里。我在实例化 Collection View 后尝试过,但没有用。
那么,答案是什么?我使用了 contentSize。初始通过 viewDidLayoutSubviews
仍然显示不正确的尺寸,但最终还是不错的。它不会生成任何控制台警告,更好的是,不会根据旧的框架大小触发任何错误的布局。更好的是,旋转会自动处理为 viewDidLayoutSubviews
将在更新内容大小时自动调用。
关于ios - collectionViewContentSize() 与 contentSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25333294/