Nic*_*che 1 uicollectionview swift uicollectionviewdelegateflowlayout
我想让第一部分的单元格是集合视图的全宽,第二部分是宽度的一半。在启动时,尽管高度似乎受到尊重,但单元格不尊重给定的宽度。几秒钟后,集合视图会重新加载,并且大部分时间它会将单元格设置为正确的大小。当手机的方向更改为横向时,单元格再次以不正确的尺寸绘制。
我尝试使用 UICollectionViewDelegateFlowLayout 和 sizeForItemAt 委托函数来设置单元格大小,但即使调用该函数,它们也不遵循给定的大小。
目前,我正在设置部分插入,然后计算集合视图边界中单元格的剩余可用宽度,然后将宽度除以每行的单元格数。
class HomeCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
let sectionInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView?.contentInsetAdjustmentBehavior = .always
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width: collectionView.frame.width, height: 44)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return self.sectionInsets
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return self.sectionInsets.left
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
var numberOfItemsPerRow: CGFloat = 1
var height: CGFloat = 0
switch indexPath.section {
case 0:
numberOfItemsPerRow = 1
height = 97
case 1:
numberOfItemsPerRow = 2
height = 126
default:
break
}
let padding = self.sectionInsets.left * (numberOfItemsPerRow + 1)
let availableWidth = collectionView.bounds.size.width - padding
let width = availableWidth / numberOfItemsPerRow
return CGSize(width: width, height: height)
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致单元格大小不正确,如下图所示。不正确的示例图像
只有在重新加载集合视图之后才能正确调整它们的大小。正确的示例图像
此外,当手机转向横向时,它会错误地显示它。不正确的风景示例图像
总结我的问题,第一部分的单元格应始终占据可用宽度的 100%。如果可能的话,如果它们具有自动高度,那就太好了。我试过使用 UICollectionViewFlowLayout.automaticSize.height 但我认为这行不通。对于第二部分,它需要始终占据可用宽度的 50%。
如果您使用 Storyboard 创建 CollectionView。
我想我必须这样做invalidateLayout()。事实证明,iOS 13 存在一个奇怪的错误。
您必须创建自己的 UICollectionViewFlowLayout。在你的viewDidLoad()
collectionView.collectionViewLayout = {
let flowLayout = UICollectionViewFlowLayout()
flowLayout.scrollDirection = .horizontal
return flowLayout
}()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |