Ios 更新表时,SWIFT取消ROWATINDEX非常慢
我不确定这是否与SWIFT或某个bug有关,但我曾经能够在objective c中调用它来放大和缩小tableview单元格:Ios 更新表时,SWIFT取消ROWATINDEX非常慢,ios,uitableview,swift,Ios,Uitableview,Swift,我不确定这是否与SWIFT或某个bug有关,但我曾经能够在objective c中调用它来放大和缩小tableview单元格: - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if([indexPath isEqual:[tableView indexPathForSelectedRow]]) { return 500.0; } retur
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if([indexPath isEqual:[tableView indexPathForSelectedRow]]) {
return 500.0;
}
return 81.0;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (isShowingDetails == YES) {
isShowDetails = NO;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[tableView beginUpdates];
[tableView endUpdates];
}else {
isShowingDetails = YES;
[tableView beginUpdates];
[tableView endUpdates];
}
}
但是现在,如果我尝试使用这个SWIFT版本,当取消选择行时,它有一个非常糟糕的延迟几秒钟。。以下是SWIFT版本:
override func tableView(tableView: UITableView!,
heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
if(indexPath.isEqual(tableView.indexPathForSelectedRow())) {
return 500.0;
}
return 81.0;
}
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
if(isExpanded == true)
{
isExpanded = false
self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
self.tableView.beginUpdates()
self.tableView.endUpdates()
} else {
isExpanded = true
self.tableView.beginUpdates()
self.tableView.endUpdates()
}
}
有什么想法吗?正如我所说,我不确定这是否是我写的方式,但我不明白为什么我在objective C中从未遇到过任何问题。
第一次选择SWIFT时,它可以很好地工作,只是更新的延迟真的很痛苦。iOS 8中的表视图现在可以让它们的单元格声明自己的高度,而不需要在委托方法中实现它们。如果你有能力的话,你可能会考虑这样做,因为这将是一种更干净的方式来做你想做的事情
否则,您是否在iOS 8中对Objective-C代码进行了基准测试,以确保性能不受UIKit框架本身的影响?斯威夫特仍在调用底层框架,而这正是大部分工作正在进行的地方。如果Objective-C和Swift在iOS 8上的实现速度都一样慢,您就知道这是UITableView方法本身的问题,您可以针对它们提出一个bug。如果它只是Swift,那么您知道它是Swift/UIKit/Objective-C桥接的一个bug,并且可以针对它提交一个bug 我也有同样的问题。更新到ios 8后。我的桌面视图变慢了。我有一个基于tabbar的应用程序。应用程序有两个选项卡,都包含tableview。第一个选项卡上的Tableview控制器约有350个单元格,第二个选项卡上约有40个单元格。所以当我从tab2切换到tab1时,我得到了2秒的巨大延迟。但当我从tab1切换到tab2时,速度会更快,因为tab2上的tableview的单元格相对较少。
但我的问题是,当我在任何ios6或ios7设备上运行相同的代码时,都是相同的应用程序。它更快,即使没有可跟踪的延迟。而didselect在ios 8中也很慢,tableview使整个viewcontroller超慢。我点击任何地方,我都会被耽搁。不过,该应用程序在ios7上运行非常平稳。FYI-它是快速的,而不是快速的。
==YES
和==true
是多余的、不必要的、烦人的和令人分心的。在过去的几天里,我看到了很多。谁教这个?你为什么在你的didSelect
方法中调用begin/endUpdates
?尤其是当你甚至不执行更新时,这似乎是浪费。我刚刚意识到我的整个tableview都很慢,包括滚动。。因此,这可能是一个快速的问题。请检查您现有的Objective-C代码是否同样慢,正如我前面提到的。然后一定要提交一个bug,如果您能够的话,我建议附加一个示例项目!:)