【问题标题】:Custom Margins and Restraints for Individual UICollectionViewCells单个 UICollectionViewCells 的自定义边距和限制
【发布时间】:2020-08-06 18:00:29
【问题描述】:
我有一个包含两个单元格的 2 项 UICollectionView。我的目标是每次滑动时,在任何给定时间,您只会看到一个单独的单元格,该单元格与左右边缘的间距相等。如果单元格的大小也不同,那一定意味着每个单元格必须从边距具有单独唯一的约束。
问题:
-
如何为这些单元格添加约束,以使它们在多个 iPhone 布局中保持均匀分布?
-
如何确保一个单元格不会“流血”到下一个单元格,确保在给定的时间内,屏幕上会显示一个单元格?
谢谢!
【问题讨论】:
标签:
swift
xcode
uicollectionview
constraints
uicollectionviewcell
【解决方案1】:
您必须在UICollectionViewDelegateFlowLayout 中实现三个方法才能使其正常工作。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat
将计算值返回给每个单元格,单元格将正确布局。这是一个示例实现。
extension ViewController: UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let spacing: CGFloat = 16 * 2
return .init(width: collectionView.frame.size.width - spacing, height: 100)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 16 }
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 0 }
}