重新加载uitableviewcell,iOs / Swift时随机滚动

Posted

技术标签:

【中文标题】重新加载uitableviewcell,iOs / Swift时随机滚动【英文标题】:Random scrolling while reloading uitableviewcell, iOs/Swift 【发布时间】:2015-07-03 09:52:55 【问题描述】:

我正在开发新闻提要,我正在使用 uitableview 来显示数据。我在其他线程中同步加载每个单元格数据并使用协议方法显示加载的数据:

func nodeLoaded(node: NSMutableDictionary) 
    for var i = 0; i < nodesArray.count; ++i 
        if ((nodesArray[i]["id"] as! Int) == (node["id"] as! Int)) 
            nodesArray[i] = node
            CATransaction.setDisableActions(true)
            self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
            CATransaction.setDisableActions(false)
        
    

问题是当我向下滚动时(在更新表格视图时),表格视图将我推到顶部。我正在寻找这个问题的答案,但没有任何帮助。我已经尝试禁用动画:

            CATransaction.setDisableActions(true)
            self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
            CATransaction.setDisableActions(false)

2)

            UIView.setAnimationsEnabled(false)
            self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
            UIView.setAnimationsEnabled(true)

但故事总是一样的。 当我根本不使用 self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) 时,我得到了想要的效果 ,但在这种情况下,只有当我向下滚动然后返回单元格时才会重新加载数据。

也许问题是我使用自动布局和 tableview 每次都重新计算它的高度?但我不知道如何解决它

【问题讨论】:

我想了解您为什么不想要动画。当单元格告诉用户某物已到达或已消失时的滑入动画。如果您真的不想要动画并且想要停止随机滚动,请尝试以下操作:tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation: UITableViewRowAnimation.None) 如果您想要动画,请将枚举中的 None 更改为其他内容。 哦,我以为随机滚动会启动 bcs of animation 。我尝试了 reloadSections,但 id 没有帮助 =( 你做了什么来修复它? 【参考方案1】:

你可以自己构建重载机制。

遍历所有可见单元格 (tableView.visibleCells) 并对它们应用与 -tableView:cellForRowAtIndexPath: 中相同的逻辑。

如果您需要索引路径来执行此更新,您可以向 table view 索取它 (-indexPathForCell:)。

【讨论】:

所以如果我像这样更改我的可见单元格:cell.label.text = "new",那么 uitableview 中的信息会更新吗?我试过了,但它不起作用,我做错了什么 你在说UITableView 中的什么“信息”? 您是否正在对主队列进行更新?尝试这样做 dispatch_async(dispatch_get_main_queue(), cell.label.text = "new" ) 我无法更新可见单元格 =( 你能告诉我怎么了吗?var cells = table.indexPathsForVisibleRows() as! [NSIndexPath] for var j = 0; j

以上是关于重新加载uitableviewcell,iOs / Swift时随机滚动的主要内容,如果未能解决你的问题,请参考以下文章

重新加载tableview ios 8时编辑选项消失了

重新加载时,UILabel 在 UITableViewCell 中不刷新

如何重新加载 uitableviewcell 内的集合视图

重新排序单元格后重新加载自定义 UITableViewCell

为啥手动重用的 UITableViewCell 在重新加载行时会消失?

UITableView 通知 UITableViewCell 重新加载