我的项目中有一个非常奇怪的错误。我有一个UIScrollView
作为我的主要观点。在其中,我有一个UIViewController
(不是UITableViewController
),它有一个UITableView
实例变量,还有一些杂项UIButtons
。我已将视图控制器的视图框设置为CGRectMake(0, 64, 320, 388)
,因为我上面有一个标签栏(这还没有用)。起初它效果很好,看起来很棒,但是一旦我出现并解雇modalViewController
(因此重新加载UIViewController
,我相信),它会将UIViewController
的视图推到顶部屏幕(默认情况下将其设置为CGRectMake(0, 0, 320, 460)
,但由于我已将wantsFullScreenLayout
设置为NO
,因此现在将其设置为CGRectMake(0, 0, 320, 388)
。
我已将此问题跟踪到viewWillAppear
和viewDidAppear
之间的某个位置。解雇modalViewController
后,这是我的确切日志:
2011-05-06 11:08:39.974 Campus [1570:207] Frame is 0.000000,64.000000,320.000000,388.000000(viewWillAppear)
2011-05-06 11:08:40.378校园[1570:207]框架为0.000000,0.000000,320.000000,388.000000(viewDidAppear)
如您所见,viewWillAppear
中的框架正常,但viewDidAppear
中没有。
我已经做了以下事情来尝试解决它:
- 在loadView
,viewDidLoad
,viewWillAppear
和viewDidAppear
中设置所需的框架。
- 将我的wantsFullScreenLayout
设为NO
- 我的方法覆盖了我的[super viewWillAppear:]
和[super viewDidAppear:]
来电。
我该怎么办?!?!?
答案 0 :(得分:0)
我的问题是,从iOS 4开始,Apple每个窗口仅支持1个视图控制器。但是,从iOS 5开始,Apple增加了对容器视图控制器的支持,并添加了UIViewController
方法,例如addChildViewController:
。使用容器视图控制器算法解决了我的问题。请访问UIViewController Class Reference了解详情。
编辑:对于那些懒得在类引用中搜索“容器视图控制器”的人,这里是类引用中相关部分的要点:
自定义UIViewController子类也可以充当容器视图 控制器。容器视图控制器管理表示 它拥有的其他视图控制器的内容,也称为其子视图 查看控制器。孩子的视图可以按原样显示或显示在 与容器视图控制器拥有的视图结合使用。
您的容器视图控制器子类应声明为public 用于关联其子级的界面。这些方法的性质已经提升 对你而言,取决于你正在创建的容器的语义。 您需要确定视图可以显示的子项数 控制器,当这些孩子被显示,他们在哪里 出现在视图控制器的视图层次结构中。你的视图控制器 class定义子项共享的关系(如果有)。 通过为您的容器建立一个干净的公共接口,您 确保孩子在逻辑上使用其功能,而无需访问 关于容器如何实现的太多私密细节 行为。
您的容器视图控制器必须关联子视图控制器 在将子视图的根视图添加到视图层次结构之前使用它自己。 这允许iOS正确地将事件路由到子视图控制器和 那些控制器管理的视图。同样,它删除后 子视图层次结构中的子视图,它应该断开它 子视图控制器本身。打破或打破这些 关联,您的容器调用由...定义的特定方法 基类。这些方法并非旨在由客户调用 你的容器类;它们只能由您的容器使用 实现以提供预期的包含行为。