我有一个带有8个UIViewControllers的应用程序,它是从左/右/上/下导航。它们是在应用程序启动时创建的,并保存在NSArray中。其中只有1个被添加到视图树(addSubview :)中 - 其余的只是坐在缓存中,直到需要它们为止。
现在我遇到的问题是旋转到Landscape时。只有当前可见的视图会将bounds.size更改为Landscape。导航到下一个视图时,该视图仍然认为它在纵向中(但是包含的视图将全部显示在Landscape中)。
顺便说一下,应用程序的视图层次结构如下:UIWindow - >主要UIViewController - > 8个缓存的UIViewControllers中的1个。
例如: *改变方向: - 主要UIViewController.view.bounds.size = 480x300(OK) - 其中一个缓存的UIViewControllers view.bounds.size = 480x300(OK) *转到下一个视图: - 主要UIViewController.view.bounds.size = 480x300(OK), - 另一个缓存的UIViewControllers view.bounds.size = 320x460(??)
不知道最近发生了什么。我是否必须以某种方式告诉缓存的UIViewControllers方向/大小是否发生了变化?
非常感谢
答案 0 :(得分:2)
是的,你可以。最理想的是,您应该清除每个视图控制器在屏幕关闭时管理的视图。
只需将nil
分配给正在替换的视图控制器的view
属性即可。这将释放视图使用的所有资源,无论如何都是不可见的。作为额外的奖励,每当您决定再次在前面使用特定的viw控制器时,视图就会使用适当的帧重新创建。
我还假设您正在实现的是UIViewController
的子类,它充当其他视图控制器的容器。就像名为UITabController
的{{1}}或类似的兄弟姐妹一样。 Noe,父视图控制器(您的子类)负责根据需要调整其子视图控制器视图的框架。
创建容器视图控制器不是一项小任务,Apple的支持并不完整。您必须做一些事情,包括但不限于:
使其发挥作用的最后一部分是打破一些规则。视图控制器工作非常糟糕,除非他们知道他们的父视图控制器,布局将是错误的,模态视图控制器行为奇怪。不幸的是CWGridController
是只读的,或者你会想到。无论如何使用KVC设置它将解决大多数问题,当您提交到App Store时Apple似乎没有反对:
parentViewController
答案 1 :(得分:0)
在viewWillAppear中,您必须检查界面方向并相应地设置框架。