我试图找出如何一路滚动到的时候,屏幕第一次加载一个UICollectionView的底部。 我能够在状态栏被触摸滚动至底部,但我希望能够自动完成,当视图载荷为好。 如果我想在状态栏被触摸滚动至底部的下方工作正常。
- (BOOL)scrollViewShouldScrollToTop:(UITableView *)tableView
{
NSLog(@"Detect status bar is touched.");
[self scrollToBottom];
return NO;
}
-(void)scrollToBottom
{//Scrolls to bottom of scroller
CGPoint bottomOffset = CGPointMake(0, collectionViewReload.contentSize.height - collectionViewReload.bounds.size.height);
[collectionViewReload setContentOffset:bottomOffset animated:NO];
}
我已经打过电话[自scrollToBottom]在viewDidLoad中。 这是行不通的。 我如何能滚动视图时加载底部的任何想法?
只是为了阐述我的意见。
前元件是视觉所以某些用户界面元素不能被很好地操纵viewDidLoad中被调用。 喜欢走动的工作按钮,但处理子视图的东西往往不会(像滚动的CollectionView)。
在viewWillAppear中或viewDidAppear调用时大部分操作都将最好的工作。 这里是一个除了来自指出覆盖了上述两种方法的时候做了一个重要的事情苹果文档:
您可以覆盖此方法来执行与呈现视图相关联的其他任务。 如果重写此方法,您必须在您执行某些时候调用超。
超级呼叫之前自定义实现通常被称为。 (这样的代码的覆盖的方法内的第一行)。
我发现,没有什么会在viewWillAppear中工作。 我只能得到它viewDidLayoutSubviews工作:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:endOfModel inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:NO];
}
因此,也有类似的问题,这里是另一种方式来它不使用scrollToItemAtIndexPath
这将滚动到底部仅当含量大于视图帧大。
它可能更好地使用scrollToItemAtIndexPath但是这只是另一种方式来做到这一点。
CGFloat collectionViewContentHeight = myCollectionView.contentSize.height;
CGFloat collectionViewFrameHeightAfterInserts = myCollectionView.frame.size.height - (myCollectionView.contentInset.top + myCollectionView.contentInset.bottom);
if(collectionViewContentHeight > collectionViewFrameHeightAfterInserts) {
[myCollectionView setContentOffset:CGPointMake(0, myCollectionView.contentSize.height - myCollectionView.frame.size.height) animated:NO];
}
迅速3示例
let sectionNumber = 0
self.collectionView?.scrollToItem(at: //scroll collection view to indexpath
NSIndexPath.init(row:(self.collectionView?.numberOfItems(inSection: sectionNumber))!-1, //get last item of self collectionview (number of items -1)
section: sectionNumber) as IndexPath //scroll to bottom of current section
, at: UICollectionViewScrollPosition.bottom, //right, left, top, bottom, centeredHorizontally, centeredVertically
animated: true)
获取indexpath的最后一个项目。 然后...
- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated
对于我来说,我发现旁边的解决方案:
调用reloadData中的CollectionView,并就主要DCG滚动。
__weak typeof(self) wSelf = self;
[wSelf.cv reloadData];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"HeightGCD:%@", @(wSelf.cv.contentSize.height));
[wSelf.cv scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:50 inSection:0] atScrollPosition:UICollectionViewScrollPositionBottom animated:YES];
});