我有集合视图,其中每个单元格实际上是一个获取整个屏幕的表格视图。我想只滚动到下一个表(它水平放置)。所以,我希望在任何时候屏幕上只有一个表。因此,当用户向右滑动时,滚动视图会更改其内容以隐藏当前表格视图并显示另一个。
我可以通过实现手势识别器来获取该行为并手动更改滚动视图contentOffset,但我想有一种简单的方法可以做到这一点。
如何实现我需要的行为?
答案 0 :(得分:1)
如果CollectionView的每个单元格都覆盖了collectionView的整个宽度,则可以在CollectionView上启用分页。
最后如果您想在不启用分页的情况下执行此操作,则可以创建UICollectionView布局的子类
class YourCollectionViewLayout: UICollectionViewFlowLayout {
override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
var offsetAdjustment = CGFloat.greatestFiniteMagnitude
let horizontalOffset = proposedContentOffset.x + 5 //your cell inset
let targetRect = CGRect(origin: CGPoint(x: proposedContentOffset.x, y: 0), size: self.collectionView!.bounds.size)
for layoutAttributes in super.layoutAttributesForElements(in: targetRect)! {
let itemOffset = layoutAttributes.frame.origin.x
if (abs(itemOffset - horizontalOffset) < abs(offsetAdjustment)) {
offsetAdjustment = itemOffset - horizontalOffset
}
}
return CGPoint(x: proposedContentOffset.x + offsetAdjustment, y: proposedContentOffset.y)
}
}