Pet*_*isu 7 cocoa-touch objective-c ios uicollectionview
我想滚动到集合视图的页脚或标题视图,但是,标准方法scrollToItemAtIndexPath只滚动到单元格
- (void)scrollToBottom {
NSInteger section = [self numberOfSectionsInCollectionView:self.collectionView] - 1;
NSInteger item = [self collectionView:self.collectionView numberOfItemsInSection:section] - 1;
if ((section > 0) && (item > 0)) {
NSIndexPath * lastIndexPath = [NSIndexPath indexPathForItem:item inSection:section];
[self.collectionView scrollToItemAtIndexPath:lastIndexPath atScrollPosition:UICollectionViewScrollPositionBottom animated:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
如何滚动到任何页脚,标题视图,类似于滚动到单元格?
我知道这是一个老问题,但我最近遇到了同样的问题.我找到的最佳解决方案来自Gene De Lisa,网址为http://www.rockhoppertech.com/blog/scroll-to-uicollectionview-header/ 当您似乎在Obj-C中工作时,这里是他的Swift代码的端口,我用:
-(void) scrollToSectionHeader:(int)section {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:section];
UICollectionViewLayoutAttributes *attribs = [self.collectionView layoutAttributesForSupplementaryElementOfKind:UICollectionElementKindSectionHeader atIndexPath:indexPath];
CGPoint topOfHeader = CGPointMake(0, attribs.frame.origin.y - self.collectionView.contentInset.top);
[self.collectionView setContentOffset:topOfHeader animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将正确滚动到给定部分的标题(我需要的全部).修改它以滚动到页脚是很简单的:
-(void) scrollToSectionFooter:(int)section {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:section];
UICollectionViewLayoutAttributes *attribs = [self.collectionView layoutAttributesForSupplementaryElementOfKind:UICollectionElementKindSectionFooter atIndexPath:indexPath];
CGPoint topOfFooter = CGPointMake(0, attribs.frame.origin.y - self.collectionView.contentInset.top);
[self.collectionView setContentOffset:topOfFooter animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我最近有同样的问题。这是我在Swift 4中的解决方案,它模仿了scrollToItem(at:at:animated:)Header和Footers 的行为。随时改进:
func scrollToSupplementaryView(ofKind kind: String, at indexPath: IndexPath, at scrollPosition: UICollectionViewScrollPosition, animated: Bool) {
self.layoutIfNeeded();
if let layoutAttributes = self.layoutAttributesForSupplementaryElement(ofKind: kind, at: indexPath) {
let viewOrigin = CGPoint(x: layoutAttributes.frame.origin.x, y: layoutAttributes.frame.origin.y);
var resultOffset : CGPoint = self.contentOffset;
switch(scrollPosition) {
case UICollectionViewScrollPosition.top:
resultOffset.y = viewOrigin.y - self.contentInset.top
case UICollectionViewScrollPosition.left:
resultOffset.x = viewOrigin.x - self.contentInset.left
case UICollectionViewScrollPosition.right:
resultOffset.x = (viewOrigin.x - self.contentInset.left) - (self.frame.size.width - layoutAttributes.frame.size.width)
case UICollectionViewScrollPosition.bottom:
resultOffset.y = (viewOrigin.y - self.contentInset.top) - (self.frame.size.height - layoutAttributes.frame.size.height)
case UICollectionViewScrollPosition.centeredVertically:
resultOffset.y = (viewOrigin.y - self.contentInset.top) - (self.frame.size.height / 2 - layoutAttributes.frame.size.height / 2)
case UICollectionViewScrollPosition.centeredHorizontally:
resultOffset.x = (viewOrigin.x - self.contentInset.left) - (self.frame.size.width / 2 - layoutAttributes.frame.size.width / 2)
default:
break;
}
self.scrollRectToVisible(CGRect(origin: resultOffset, size: self.frame.size), animated: animated)
}
}
Run Code Online (Sandbox Code Playgroud)
要点可以在这里找到:https : //gist.github.com/aymericbaur/3256e25e33b64c3e5d380febf832db07
希望对您有所帮助。
| 归档时间: |
|
| 查看次数: |
1849 次 |
| 最近记录: |