CGPoint offset = [_table contentOffset];
[_table reloadData];
[_table setContentOffset:offset animated:NO]; //unuseful
// __block UITableView *tableBlock = _table;
// [self performBlock:^(id sender) {
// [tableBlock setContentOffset:offset];
// } afterDelay:2];
Run Code Online (Sandbox Code Playgroud)
我知道不知道任何被调用的委托方法reloadData.使用afterDelay:2哪种黑客可能太短或太长,所以我该如何实现呢?
我有一个_TableView项目,我想设置自动刷新,我不希望它滚动刷新,让我们说用户滚动2页,并刷新trigered - >所以我想把刷新的内容放到表的顶部没有插入用户的滚动
假设用户在第18行,现在_dataSource刷新,所以它取出让我们说4个项目,所以我希望用户留在他的项目上.
实现它的最佳方法是什么?
我CoreData用a NSFetchResultController来显示数据UITableView.我有一个问题:UITableView更改contentOffSet.y插入/移动/删除新行的时间.当用户滚动到例如中间时,UITableView当插入新行时弹跳.
这个github链接到一个项目,其中包含重现此行为的最小代码:https://github.com/Jasperav/FetchResultControllerGlitch(代码也在下面)
这显示了故障.我站在我的中间,我UITableView不断看到插入新行,无论当前contentOffSet.y.
当NSFetchedResultsController添加新记录时,如何阻止向上滚动UITableView?
不相关,因为我明确设置rowHeight和
estimatedRowHeight.
错误:UITableView跳转到顶部,UITableViewAutomaticDimension
在endUpdates没有运气之前尝试了这个
UITableView由带有UITableViewAutomaticDimension的FetchedResultsController提供 - 当重新加载表时单元格移动
与第一个链接相同,我设置了rowHeight和
estimatedRowHeight.
我也试过切换到,performBatchUpdates而不是begin/endUpdates,也没有解决.
在UITableView插入时/删除/移动行时只是应保持不动那些行不可见的用户.我希望这样的东西应该开箱即用.
这是我最终想要的(只是复制WhatsApp的聊天屏幕):
UITableView应该为新插入的行设置动画并更改当前contentOffSet.y.如果a UICollectionView更合适,那就没问题了.
我想复制WhatsApp聊天屏幕.我不确定他们是否使用NSFetchResultController,但除此之外,最终目标是为他们提供确切的用户体验.因此,插入,移动,删除和更新单元格应该按照WhatsApp的方式进行.因此,对于一个工作示例:转到WhatsApp,获取一个不工作的示例:下载项目.
代码(ViewController.swift):
import CoreData
import UIKit
class ViewController: UIViewController, NSFetchedResultsControllerDelegate, …Run Code Online (Sandbox Code Playgroud) 我有一个可扩展的UITableView. 当部分被点击时,它们会随着动画(滚动)展开或折叠。我的问题是在展开或折叠标题时有一个奇怪的动画。UITableView滚动到顶部,然后转到点击的单元格。此外,当没有扩展单元格时,有时,它不会滚动到顶部,并且顶部标题和顶部视图之间有很大的空间UITableView。
我的问题是我需要滚动到扩展部分并摆脱滚动到顶部的错误。
我尝试了以下解决方案,但对我不起作用: insertRows 后防止表视图滚动到顶部
它看起来也与下面的问题相同,但无法弄清楚如何实现它。 为什么我的 UITableView 在插入或删除行时“跳跃”?
我如何切换选择:
func toggleSection(header: DistrictTableViewHeader, section: Int) {
print("Trying to expand and close section...")
// Close the section first by deleting the rows
var indexPaths = [IndexPath]()
for row in self.cities[section].districts.indices {
print(0, row)
let indexPath = IndexPath(row: row, section: section)
indexPaths.append(indexPath)
}
let isExpanded = self.cities[section].isExpanded
if(isExpanded){
AnalyticsManager.instance.logPageEvent(screenName: analyticsName!, category: "Button", action: Actions.interaction, label: "\(self.cities[section].name) Collapse Click")
}else{
AnalyticsManager.instance.logPageEvent(screenName: analyticsName!, category: "Button", action: Actions.interaction, …Run Code Online (Sandbox Code Playgroud)