相关疑难解决方法(0)

更改行时会发生弹跳

毛刺

CoreData用a NSFetchResultController来显示数据UITableView.我有一个问题:UITableView更改contentOffSet.y插入/移动/删除新行的时间.当用户滚动到例如中间时,UITableView当插入新行时弹跳.

复制项目

这个github链接到一个项目,其中包含重现此行为的最小代码:https://github.com/Jasperav/FetchResultControllerGlitch(代码也在下面)

这显示了故障.我站在我的中间,我UITableView不断看到插入新行,无论当前contentOffSet.y.

在此输入图像描述

类似的问题

关注

我也试过切换到,performBatchUpdates而不是begin/endUpdates,也没有解决.

UITableView插入时/删除/移动行时只是应保持不动那些行不可见的用户.我希望这样的东西应该开箱即用.

最终目标

这是我最终想要的(只是复制WhatsApp的聊天屏幕):

  • 当用户完全滚动到顶部(对于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)

core-data uitableview nsfetchedresultscontroller ios swift

16
推荐指数
1
解决办法
568
查看次数

UITableView由带有UITableViewAutomaticDimension的FetchedResultsController提供 - 当表重新加载时单元格移动

目前的设置:

TableView具有自动计算的高度:

self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension;
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 152.0;
self.tableView.estimatedSectionHeaderHeight = 50.0;
Run Code Online (Sandbox Code Playgroud)

只要获取的结果控制器更新其数据,就会重新加载tableview:

 - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView reloadData]; 
}
Run Code Online (Sandbox Code Playgroud)

使用Xib配置单元.第一个标签固定在单元格的顶部,每个标签都固定在其上方标签的顶部,底部的标签固定在单元格的底部.

问题:

每次我在表视图中的项目上设置"收藏夹"属性时,将触发提取的结果控制器以重新加载表格并更改滚动位置.这是我想要修复的滚动位置的这种变化.

附加信息

如果我使用固定单元格高度它解决了问题但我需要UITableViewAutomaticDimension,因为第一个标签可以包裹两条线,其余标签可能存在也可能不存在.

注意 - 当我选择Fav按钮时,它在Core数据中设置fav属性并重新加载表.桌子为什么跳来跳去?

在此输入图像描述

objective-c uitableview ios autolayout

6
推荐指数
1
解决办法
899
查看次数

当NSFetchedResultsController添加新记录时,如何阻止向上滚动UITableView?

UITableView一旦我向CoreData添加新评论,我就会向上滚动.NSFetchedResultsController知道它,将此注释放在表的底部,并将表滚动到顶部.这是正常的吗?

我的例子:

就在我添加评论之前:

在此输入图像描述

在我添加评论(不是预期的行为)之后:

在此输入图像描述

它应该是这样的(在我手动手动滑动之后):

在此输入图像描述

这可能与以下情​​况有关:

  1. 这是我的排序描述符NSFetchedResultsController:

    NSSortDescriptor(key: "createdAt", ascending: false) //from the latest to the oldest
    
    Run Code Online (Sandbox Code Playgroud)
  2. 但是我需要显示反向索引路径的注释(最新版本位于最底层).换句话说,在我需要使用的任何地方,indexPath我都使用:

    private func reversedIndexPathForIndexPath(indexPath: NSIndexPath) -> NSIndexPath {
        return NSIndexPath(forRow: fetchedResultsController.fetchedObjects!.count - indexPath.row - 1, inSection: 0)
    }
    
    Run Code Online (Sandbox Code Playgroud)

NSFetchedResultsControllerDelegate:

//MARK: - NSFetchedResultsControllerDelegate

func controllerWillChangeContent(controller: NSFetchedResultsController) {
    self.tableView.beginUpdates()
}

func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {

    switch type {
    case .Insert:
        if let newIndexPath = newIndexPath …
Run Code Online (Sandbox Code Playgroud)

uitableview nsfetchedresultscontroller ios swift

4
推荐指数
1
解决办法
2170
查看次数