ios 9 - 在调用cellForRowAtIndexPath

时间:2015-09-23 05:57:53

标签: ios xcode swift uitableview ios9

亲爱的程序员,

我最近更新到Xcode 7和Swift 2,现在,每当我向下或向上滚动时,屏幕会跳跃一点(没什么太疯狂),但这会导致导航滞后。 只要我在调用 cellForRowAtIndexPath 时在屏幕上显示新单元格,就会发生这种情况。

cellForRowAtIndexPath 中,对于每个Cell,我实际上使用HanekeSwift,Labels和Buttons(使用switch,case,if等等)设置了一堆imageView。

奇怪的是,每当我在 cellForRowAtIndexPath 中评论大部分设置时,跳跃的部分就会消失。

我已尝试评论每个部分,但我还没有设法检测出跳转部分的原因。或者我想知道它是否与这个事实有很大关系。

每个Cell的高度都不同,我使用autolayout来检测每个Cell的高度。 timelineTableView.rowHeight = UITableViewAutomaticDimension timelineTableView.estimatedRowHeight = 600

我还试图实现estimatedHeightForRowAtIndexPath委托方法,并手动计算每个Cell的高度,但没有成功。

任何人都知道为什么我会遇到跳跃的部分以及为什么当我评论所有内容时,跳跃消失了?

更新1: 在玩Time Profiler(在我的cellForRowAtIndexPath方法中注释掉一些函数)时,我意识到当cellForRowAtIndexPath的运行时间低于80-90ms时,我看不到跳跃的部分。运行时间越长,我越觉得跳跃

1 个答案:

答案 0 :(得分:1)

根据您的仪器跟踪,创建和设置按钮图像几乎一直都在使用。看起来像这部分:

// Approve Button && Disapprove Button
    if selfie.user_vote_status == 1 {
        self.approveButton.setImage(UIImage(named: "approve_select_button.png"), forState: .Normal)
        self.disapproveButton.setImage(UIImage(named: "reject_button.png"), forState: .Normal)
    } else if selfie.user_vote_status == 2 {
        self.approveButton.setImage(UIImage(named: "approve_button.png"), forState: .Normal)
        self.disapproveButton.setImage(UIImage(named: "reject_select_button.png"), forState: .Normal)
    } else {
        self.approveButton.setImage(UIImage(named: "approve_button.png"), forState: .Normal)
        self.disapproveButton.setImage(UIImage(named: "reject_button.png"), forState: .Normal)
    }

您可以先通过注释掉这部分代码进行测试。

要解决此问题,您需要做两件事。首先,看看整个方法,并尝试找出每次重复的事情。这些东西需要移动到初始化器中或者设置在故事板中,而不是每次运行时都被击中。

其次,无需继续创建和分配这些图像。批准按钮具有两个图像之一,拒绝按钮具有两个图像之一。您可以为选择的状态设置一个图像,为普通状态设置一个图像(一次,在故事板或初始化器中),然后根据情况设置按钮的选定状态投票状态。