我正在使用UICollectionView
并使用UIButton
从单元格滚动到单元格。
当我来到集合视图的末尾时,我想要button.hidden = YES。我如何知道currentIndex == MAX
答案 0 :(得分:7)
集合视图是滚动视图。因此,您可以访问所有滚动视图委托方法 - 每次滚动视图移动时都会调用scrollViewDidScroll:
,如果您已滚动到底部,结束或任何位置,则可以检查该点。< / p>
请注意,contentOffset
属性将引用可见滚动区域的原点,因此最简单的方法是检查这样的内容:
if (CGRectGetMaxY(scrollView.bounds) == scrollView.contentSize.height) {
button.hidden = YES;
}
如果您自己滚动视图,则不会调用此委托方法,但是 - 只有在用户滚动视图时才会应用此方法。您需要在自动滚动代码的末尾自己调用它,或者在自动滚动代码中使用类似的逻辑来自行检查。
答案 1 :(得分:3)
您可以通过使用if语句来检查当前indexPath是否显示数据源数组中的最后一个对象。
if(indexPath.row == [dataSourceArray count]){
//Last cell was drawn
}
答案 2 :(得分:3)
您可以直接检测我们何时处于集合视图的底部并执行类似的操作..
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// getting the scroll offset
CGFloat bottomEdge = scrollView.contentOffset.y + scrollView.frame.size.height;
if (bottomEdge >= scrollView.contentSize.height)
{
// we are at the bottom
button.hidden = YES;
}
}
当您到达集合视图中的scrollView底部时,您可以执行任何操作。
答案 3 :(得分:2)
这是我的代码,显示最后一个单元格何时开始出现(Swift 4):
override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if indexPath.row == dataArray.count - 1 {
// do something
}
}
答案 4 :(得分:1)
另一种方法是检测collectionView:cellForItemAtIndexPath
是否到达最后一部分或最后一行。
例如,您可以有两个部分,一个部分用于显示内容,另一个部分用作当前视图滚动到结尾的指示符:
public func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
if indexPath.section == 2 { // or if indexPath.row == myDat.count
// CollectionView is scrolled to the bottom
self.state = .Loading
// Do something
}
}
不要忘记设置和重置视图状态以避免被困在一个状态:
public func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return self.state == .Loading ? 1 : 2
}
而且,您还可以使用其他UICollectionViewDelegate
方法进行检测,例如:
func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
if indexPath.row == yourData.count{
self.state = .Loading
// Do something
}
}
答案 5 :(得分:0)
我认为其中任何一项都可以帮到你
1.只要滚动动作停止或底部
,scrollview delegate
就会调用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
for (UICollectionViewCell *cell in [self.collectionView visibleCells]) {
NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];
NSUInteger lastIndex = [indexPath indexAtPosition:[indexPath length] - 1];
}
}
或
您可以使用类似的内容来检查集合视图的最后一个索引
NSInteger section = [self numberOfSectionsInCollectionView:self.collectionView] - 1;
NSInteger item = [self collectionView:self.collectionView numberOfItemsInSection:section] - 1;
NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:item inSection:section];
答案 6 :(得分:0)
override func collectionView(_ collectionView: UICollectionView, willDisplaySupplementaryView view: UICollectionReusableView, forElementKind elementKind: String, at indexPath: IndexPath) {
if (elementKind == UICollectionElementKindSectionHeader) {
view.layer.zPosition = 0;
}
}