Vla*_*kov 3 ios uicollectionview ios13
systemLayoutSizeFittingSize我在 iOS 13 Beta 上遇到问题。我正在开发一个 NativeScript 插件,它使用 来systemLayoutSizeFittingSize“UICollectionViewCell测量和布局”单元格中的 UIView。我一直在做的是:
systemLayoutSizeFittingSize如果我需要强制测量/布局UIView单元格中的内容,请手动调用或者
systemLayoutSizeFittingSize并再次测量和布局UIView单元中的内容systemLayoutSizeFittingSize在 iOS 13 beta 之前,这一切都运行得很完美,操作系统本身调用 API 的方式似乎发生了变化。在 iOS 13 beta 中,操作系统根本不调用该 API,而是使用collectionView:layout:sizeForItemAtIndexPath: API 来确定 UICollectionViewCell 的大小。在 iOS 12 及更低版本中,UICollectionView 完成其初始布局传递后,它会调用每个 UICollectionViewCell,systemLayoutSizeFittingSize这使您有机会让单元格告知其大小。在iOS 13中systemLayoutSizeFittingSize不再被称为。
也许我必须更改或调用 UIView 本身或 UICollectionView 才能使其像以前在 iOS 12 中一样工作,但我有点不明白我是否正确使用了它systemLayoutSizeFittingSize。
所以我的问题是,我应该期望systemLayoutSizeFittingSize操作系统自动调用 a 还是这只是手动强制 aUICollectionViewCell告知其大小的一种方法?总的来说我使用得正确吗?
编辑:
经过进一步调查,iOS 13(测试版)上似乎有变化systemLayoutSizeFittingSize。estimatedItemSize当设置布局时,不再像以前那样调用它。我创建了一个项目来显示由这种行为变化引起的问题,我将向 iOS 团队报告这一问题。该项目可以在这里找到。此问题导致在使用 UICollectionView 时无法实现“自动调整大小”单元格的行为,因为systemLayoutSizeFittingSize不再被调用。
看起来当前的 iOS 13.0 beta(模拟器版本 11.0 (SimulatorApp-895.6 SimulatorKit-553.12 CoreSimulator-643.11 )存在一个内部重大更改,该systemLayoutSizeFittingSize更改未记录在发行说明中。更改UICollectionViewCell是不再调用被systemLayoutSizeFitting(_:withHorizontalFittingPriority:verticalFittingPriority:)称为。
所以:
systemLayoutSizeFittingSize在 iOS <12 上调用systemLayoutSizeFitting(_:withHorizontalFittingPriority:verticalFittingPriority:)在 iOS >13 上调用因此,作为解决方案/解决方法,您必须复制代码systemLayoutSizeFittingSize并将其放置在systemLayoutSizeFitting(_:withHorizontalFittingPriority:verticalFittingPriority:). 虽然这不是完美的解决方案/解决方法,但至少目前为我们提供了一个可行的解决方案,但在 iOS 13 结束测试版并发布且不再需要之前,这种情况很可能会发生变化。代码示例:
import UIKit
class FlickPhotoCell: UICollectionViewCell {
func getCellSize(_ targetSize: CGSize) -> CGSize {
return CGSize(width: 50, height: 200)
}
// Only this is called on iOS 12 and lower
override func systemLayoutSizeFitting(_ targetSize: CGSize) -> CGSize {
return self.getCellSize(targetSize)
}
// Only this is called on iOS 13 beta
override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize {
return self.getCellSize(targetSize)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3780 次 |
| 最近记录: |