【发布时间】:2015-07-15 10:49:56
【问题描述】:
TL;TR:导航控制器的导航栏在滚动 UItableView 时会导致延迟。隐藏时,完全没有延迟。
我的 UITableViews 迟滞了几天。经过一些stackoverflow浏览后,我几乎没有发现任何可能导致我的UItableViews滞后的东西。 我检查了一些事情:
- 我使用 ReusableIdentifier
- 我将我的课程设置为自定义课程,Outlets 位于该自定义课程中,只需将这些网点设置为
tableView cellForRowAtIndexPath - 我的单元格确实包含图像,但它们是我资产中的图像,因此,根据this answer,这不会造成任何问题,因为它已经为我缓存了这些图像。
今天,我正在创建另一个视图控制器,为了进行测试,我将Is Initial View Controller 设置为该视图。完成后,我将Is Initial View Controller 设置为第一个视图控制器而不是导航控制器。我很高兴,因为在打开新视图时它没有给我任何滚动延迟。然后我注意到我丢失了导航按钮,将Is Initial View Controller 放回导航控制器并猜猜是什么,我的 UITableView 像地狱一样滞后!
现在我真的很想知道是什么导致了这种延迟。
我在一些视图上使用这段代码来隐藏和显示栏:
override func viewWillAppear(animated: Bool) {
self.navigationController?.setNavigationBarHidden(true, animated: animated)
super.viewWillDisappear(animated)
}
override func viewWillDisappear(animated: Bool) {
self.navigationController?.setNavigationBarHidden(true, animated: animated)
super.viewWillDisappear(animated)
}
我注意到,当显示导航栏时,会出现延迟。当它被隐藏时,它不会。现在导航控制器栏只是标准的,没有什么花哨的(还)
我对 Instruments 了解不多,但如果对您有帮助:
启用导航栏: image
没有启用导航栏: image
结构
这就是我的两个视图的样子,它们都有一个 tableView,导航栏都有相同的问题,一个只包含图像、标签和按钮。另一个包含一些更多的东西,但差异几乎相同,在导航栏不隐藏时滞后。
转场
显示另一个视图有不同的方法,但到目前为止它没有任何区别。从按钮直接到视图的 Segue 会产生与使用 self.navigationController?.pushViewController(...) 时相同的延迟
iPhone 6 Plus
在 Iphone 6 Plus 上,即使没有导航栏,这款手机也会让它变得更加迟钝。然而,这可能是因为我正在使用旧的 MacBook。缩小到 33% 并且从 iphone 本身显示顶部和底部菜单时会滞后,所以我想这只是我自己的问题。
附加代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: ItemCell = self.LicenseTableView.dequeueReusableCellWithIdentifier("itemCell", forIndexPath: indexPath) as! ItemCell!
cell.lblItemDescription?.text = self.ItemsList[indexPath.row].description
return cell
}
感谢您的阅读,希望对您有所帮助,如果您需要任何其他信息,请告诉我!
【问题讨论】:
-
嗯,创建一个新的单元格来显示内容是一项消耗内存的操作,尤其是当您有很多动态内容要显示时。因此,请务必使用
dequeueReusableCellWithIdentifier:forIndexPath以避免填满内存并降低应用速度。 -
@Dree 我已经更新了我的问题,这就是我使用
dequeueReusableCellWithIdentifier:forIndexPath的简单程度。 -
我发现一篇文章总结了所有可能导致包含图像的表格滚动缓慢的可能问题并列出了一些解决方案。希望这会有所帮助:iosinjordan.tumblr.com/post/56778173518/…
标签: ios swift uitableview uinavigationcontroller uinavigationbar