Ios 更新表时,SWIFT取消ROWATINDEX非常慢

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

我不确定这是否与SWIFT或某个bug有关,但我曾经能够在objective 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()




        }
    }
有什么想法吗?正如我所说,我不确定这是否是我写的方式,但我不明白为什么我在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,如果您能够的话,我建议附加一个示例项目!:)