记住UITableView的滚动位置
我在xcode中的iOS应用程序有点问题。 我有一个UITableView加载几百个单元格。 当我向下滚动到一个特定的单元格,深入detailviewcontrollers并再次返回主视图表已返回到顶部。 我看了下面两个类似的问题。
我怎样才能获得UITableView的滚动位置,所以我可以保存它?
在UITableView中设置滚动位置
我仍然无法让这些工作。 我不是最有经验的编码器,所以我真的很困难。
我知道像viewWillDisappear和viewDidAppear需要改变的东西,但我真的不能远远超过这一点。
在这张桌子上,我有一个reloadDatafunction,所以可以从服务器上下载最新的数据,也可以在工作的search栏中查看。
无论如何,一个援助之手将是伟大的。 谢谢,
卢克
看到这里你必须先保存tableView
的滚动位置,即tableView
contentOffset
,然后在你回到tableView
时候再使用它。
1)何时何地保存:
何时 :在这一点上,当您深入到detailViewController
保存tableView
的contentOffset
如何 : float verticalContentOffset = tableView.contentOffset.y;
2)如何将tableView设置回同一个滚动位置:
[tableView setContentOffset:CGPointMake(0, verticalContentOffset)];
希望这会帮助你。
sorting!
从Desdenova那里得到一些启发,在工作的同时,我好好思考一下,意识到可能是什么。 记住我有一个search栏,几个月前我已经实现了下面的代码来隐藏它:
[self.tableView setContentOffset:CGPointMake(0,-20) animated:NO];
在天真的我把viewDidAppear
而不是viewDidLoad
。 显然,这确实隐藏了search栏,但是当它在错误的void命令中时,每次masterDetailView返回到堆栈顶部时都会执行它。 所以,将上面的代码移动到viewDidLoad之后,它现在仍然隐藏它,但只有一次。
我只是像其他初学者一样拼出来,像我自己,他们可能遇到同样的问题,可能只是保存他们的理智!
感谢你们所有的帮助我的想法。
+1给大家!
如果有人想知道,我尝试了Prashant N的解决scheme,它的工作。 但是reloadData
现在不再重新设置滚动位置,所以除了reloadData
以外我不需要做任何事情。
我解决这个问题的方法是将表格滚动到最后一项的索引行。
private func scrollToItem(item:Int, section:Int bottom:Bool = true, animated:Bool = false) { let indexPath = NSIndexPath(forRow: item:Int-1, inSection: section) var position = UITableViewScrollPosition.Bottom if (!bottom) { position = UITableViewScrollPosition.Top } self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: position, animated: animated) }
出于某种原因,这对我来说是半途而废的(有时候这个位置只能是近似的)。 我终于使用了以下先验较不干净的解决scheme
NSIndexPath *firstVisibleIndexPath = [[self.tableView indexPathsForVisibleRows] objectAtIndex:0]; [self.tableView scrollToRowAtIndexPath:self.firstVisibleIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; self.firstVisibleIndexPath = firstVisibleIndexPath;
哪个效果更好。
正如其他评论中提到的那样,在UINavigationController中滚动到返回导航顶部不是默认行为。
另一个原因可能是您在viewWillAppear中设置了靠近桌面顶部的单元格作为第一响应者,例如您桌子顶部附近的search框或编辑字段。 UITableViewController会自动将第一个响应者滚动到视图中,这很好。 只要这就是你想要做的。 :)注意不要在viewWillAppear中设置第一响应者,除非这是你想要的。 干杯,亚利桑那州
我的collections决定:
CGFloat oldCollectionViewHeight = self.messageCollectionView.contentSize.height; [self.messageCollectionView reloadData]; [self.messageCollectionView layoutIfNeeded]; CGFloat newCollectionViewHeight = self.messageCollectionView.contentSize.height; if (oldCollectionViewHeight) { self.messageCollectionView.contentOffset = CGPointMake(0, newCollectionViewHeight - oldCollectionViewHeight); }
对于表格,原理是一样的。
- 预计应用程序窗口在应用程序启动结束时会有一个根视图控制器
- 如何在将iOS应用程序提交给Apple Store时添加特定要求?
- 如何在UIScrollView与PagingEnabled更改页面时更新UIPageControl?
- 象征iPad崩溃日志后,回溯仍然不可读
- Cocos2d V3 iOS – 如何从App Delegate访问runningScene
- 使用Asihttprequest和iPhone的Json框架parsingJSON数据
- .on(“click”)在iOS上不起作用
- 如何简单地等待iOS中的任何布局?
- App Inviteconfiguration失败Firebase iOS cocoapods