ios - collectionViewContentSize() 与 contentSize

标签 ios swift uicollectionview uicollectionviewcell uicollectionviewlayout

有什么区别

collectionViewController.collectionViewLayout.collectionViewContentSize()collectionViewController.collectionView.contentSize ?

你喜欢用什么?

最佳答案

contentSizeUIScrollView 的属性,而 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/

相关文章:

iphone - 将 nil 传递给 performSelector

ios - UICollectionView 初始化问题

ios - 如何更改 UICollectionView 中整个部分的背景颜色?

ios - 如何获取指定单元格周围的单元格索引?

ios - Objective-C 获取子类

ios - iOS 应用开发新手

ios - Alamofire 5 - 对成员 'upload(multipartFormData:to:usingThreshold:method:headers:interceptor:fileManager:)' 的引用不明确

swift - 添加到 NSAttributedString 时翻转图像

ios - 如何在iOS中读取带有字符串值的EXCEL XLSX文件?

swift - 订阅 View Controller 属性,无需嵌套订阅循环