我不确定这是否与SWIFT或某些bug有关,但我曾经能够在目标c中调用它来放大和缩小tableview单元格:
- (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()
}
}
有什么想法吗?正如我所说,我不确定它是否按照我写的方式,但我不明白为什么我在目标C中从未遇到任何问题。 它在第一次选择它时在SWIFT中工作正常,只是延迟更新真的很痛苦。
答案 0 :(得分:1)
iOS 8中的表视图现在可以让它们的单元格声明它们自己的高度,而不是需要在委托方法中实现它们。如果您能够这样做,您可能希望看一下这样做,因为这将是一种更清洁的方式来做您在此尝试做的事情。
否则,您是否已在iOS 8中对Objective-C代码进行基准测试,以确保UIKit框架本身的性能不受影响? Swift仍在调用底层框架,而这正是大部分工作发生的地方。如果Objective-C和Swift实现在iOS 8上看起来同样慢,那么你知道UITableView方法本身存在问题,你可以提出针对它们的bug。如果它只是Swift,你知道它是Swift / UIKit / Objective-C桥接的一个错误,并且可以提出错误。
答案 1 :(得分:0)
我有同样的问题。更新到ios 8.后我的tableview变得缓慢。我有一个基于tabbar的应用程序。 App有2个标签,都包含tableview。第一个选项卡上的Tableview控制器有大约350个单元格,第二个选项卡包含大约40个。所以当我从tab2切换到tab1时,我会得到2秒的巨大延迟。但是当我从tab1切换到tab2时,它会更快,因为tab2上的tableview具有相对较少的单元格。 但我的问题是,当我在任何ios6或ios7设备中运行相同的代码相同的应用程序。它更快,即使没有可追踪的延迟。并且在ios 8中,didselect也很慢,tableview使得整个viewcontroller超级慢。我到处都是,我得到了延迟。 App虽然在ios7上运行得非常流畅。