Tap*_*Pal 17 core-data uitableview ios swift uitableviewautomaticdimension
我使用UITableView同estimatedRowHeight和UITableViewAutomaticDimension.我也用它NSFetchedResultsControllerDelegate来反映变化.
一切都很好.现在的问题是,当我添加一些记录时CoreData,NSFetchedResultsController称为它的委托,但意外的事情发生.每次TableView突然滚动到Top.
NSFetchedResultsControllerDelegate
func controllerWillChangeContent(controller: NSFetchedResultsController) {
tableView.beginUpdates()
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
tableView.endUpdates()
}
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch type {
case .Insert:
tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .None)
break
case .Update:
tableView.reloadRowsAtIndexPaths([indexPath!], withRowAnimation: .None)
break
case .Delete:
tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .None)
break
default: break;
}
}
Run Code Online (Sandbox Code Playgroud)
通过谷歌搜索我发现很少有人建议使用的答案,tableView: heightForRowAtIndexPath:但因为我的细胞高度是动态的.所以我该怎么做?
这是tableview的默认行为,在tableview中插入一行将其滚动到顶部.我确实遇到了与我的应用程序相同的问题.以下是我如何管理tableview的内容偏移量,按照步骤,
1)在插入行或节之前存储UITableview的内容偏移量.
2)在数组中插入对象.
3)重新加载tableview
4)减去差值并手动设置内容偏移量.
let oldOffset: CGFloat = tblTest.contentSize.height
tblTest.reloadData()
let newOffset: CGFloat = tblTest.contentSize.height
tblTest.setContentOffset(CGPointMake(0, (newOffset - oldOffset)), animated: false)
Run Code Online (Sandbox Code Playgroud)
这就是我到目前为止在我的应用程序中所做的工作,并且每次都使用动态单元来克服重新初始化的单元格,它的工作非常棒.
tableView.reloadData()
if tableView.numberOfRowsInSection(0) > 0
{
let indexPath = NSIndexPath(forRow: 0, inSection: 0)
self. tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2360 次 |
| 最近记录: |