【问题标题】:Removing views from navigation controller that are not being shown从导航控制器中删除未显示的视图
【发布时间】:2015-06-25 01:12:55
【问题描述】:

我有一个控制一堆视图的导航控制器。该应用程序是一个字母卡片应用程序,您可以滚动浏览,因此有很多页面。为了减少内存使用,我想从堆栈中删除未显示的视图。我想删除您从中推送的视图,以便下面的堆栈为空。我不能让它工作,所以需要一些帮助。我有下面的代码。这会减少内存吗?

func showCViewController() {
    let view4 = self.storyboard?.instantiateViewControllerWithIdentifier("CView") as! CViewController
    self.navigationController?.pushViewController(view4, animated: true)

    //My code that doesn't work
    let view5 = self.storyboard?.insViewControllerWithIdentifier("BView")
    self.view5.removeFromSuperview!()       
}

【问题讨论】:

  • 定义“不起作用”。它编译吗?它会崩溃吗?它会发射导弹吗?此外,您是否绝对确定内存实际上是一个问题,或者您是否过早优化?
  • 我已经测试了 1-4 个视图,每个视图会膨胀 10mb 的内存。它不会崩溃。

标签: ios swift uinavigationcontroller


【解决方案1】:

导航控制器被设计为堆栈。您只能在堆栈顶部添加或删除视图控制器。无法从顶视图控制器下移除视图控制器。

你需要不同风格的父视图控制器来做你想做的事。我建议查看 UIPageViewController。它可以像 iOS 中的图片应用一样进行 iBooks 样式的页面卷曲过渡或侧滑过渡。

创建您自己的具有自定义行为的父视图控制器也不难。对此的支持是在 iOS 6 中添加的,并且从那时起得到了扩展。

【讨论】:

  • 我确实用 UIPageViewController 做了一个,但它在启动时实例化了所有视图。我找到了一个清除未使用的视图的方法。我必须处理那个。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
相关资源
最近更新 更多