2015-09-23 33 views
2

亲爱的同学程序员,IOS 9 - 调用的cellForRowAtIndexPath时

我最近更新的Xcode 7和斯威夫特2,现在,每当我滚动向上或向下滚动/掉电时的tableview细胞跳跃,画面跳一点点(没有太疯狂),但它使导航laggy。 只要我在屏幕上显示一个新的单元格,就会发生这种情况cellForRowAtIndexPath被调用。

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

奇怪的部分是,只要我在cellForRowAtIndexPath中评论大部分设置,跳跃部分就消失了。

我试过评论每个部分,但我没有设法检测什么是负责跳转部分。或者我想知道这是否与治疗有很多相关。

每个单元格的高度都不同,我使用自动布局来检测每个单元格的高度。 timelineTableView.rowHeight = UITableViewAutomaticDimension timelineTableView.estimatedRowHeight = 600

我还试图执行estimatedHeightForRowAtIndexPath委托方法和手动计算每个小区的但没有成功的高度。

任何人都有一个想法,为什么我遇到了跳动的部分,为什么当我评论所有的东西,跳了没有?

更新1: 而与时间探查(注释掉我的cellForRowAtIndexPath方法的一些功能)播放时,我意识到,当的cellForRowAtIndexPath的运行时间比80-90ms下,我没有看到跳动的部分。此外,运行时间越长,我越觉得跳跃

+0

在设备上运行时,在仪器中使用时间分析器来查找慢速线。但这是一个在细胞制备方法中要做的工作!通过根据设备尺寸进行切换,您也击败了自动布局的要点:) – jrturton

+0

您是否认为这可能与以下事实有关:这是一个很多细胞制备的事实?我有选择吗?我必须为每个Cell设置所有这些。 – fabdarice

+0

并非所有人都需要每次都做。但用仪器找到你的慢码,不要猜测。 – jrturton

回答

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) 
    } 

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

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

其次,没有必要继续创建和分配这些图像。批准按钮具有两个图像中的一个,不同意按钮具有两个图像中的一个。您可以为选择一个图像状态,并为正常状态设置一个图像(一次,在故事板或初始化程序中),然后根据投票状态设置按钮的选定状态。

+0

首先,非常感谢您的帮助! 你可以扩展一下关于迁移到一个初始化程序吗?就像将每个Cell的所有代码放入awakeFromNib方法一样? – fabdarice

+0

可以,或者将其设置在笔尖或故事板本身中。 – jrturton

+0

根据你的建议,我设法将cellForRowAtIndexPath的所有内容从400ms减少到120ms,但是,似乎不能达到90ms以下。还有其他建议吗?我有点惊讶,虽然一些简单的治疗会导致这一点,因为我没有做任何疯狂的事,只是设置图像和标签:( – fabdarice

相关问题