【问题标题】:Lag UITableView scrolling when using Navigation controller使用导航控制器时滞后 UITableView 滚动
【发布时间】: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


【解决方案1】:

尝试以下操作:在情节提要中打开 NavigationController 场景。选择导航栏并禁用半透明:

此外: 当内容具有透明度时,表格视图会出现很多性能问题。要查找有问题的子视图,请在模拟器中选择“Debug > Color Blended Layers”。所有的红色观点都是有问题的。尝试从这些视图中移除透明度。

【讨论】:

  • 嗯,这减少了一点。有或没有导航栏之间仍然存在显着差异,当然它看起来不是很好但可以接受......感谢颜色混合图层的提示。单元格内的视图似乎很好,所有图像都是绿色的。现在,由于漂亮的背景图像,Cell 和 table 视图本身确实为背景设置了清晰的颜色。我想保持这种状态,因为这就是我们计划设计的方式(并且它在 android 上完美运行)。您对透明背景下的性能提升有什么建议吗?
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 2015-09-24
  • 2014-05-14
  • 1970-01-01
相关资源
最近更新 更多