Ios UIViewController在ViewWillDisplay和ViewDidDisplay之间调整自身大小?

Ios UIViewController在ViewWillDisplay和ViewDidDisplay之间调整自身大小?,ios,uiviewcontroller,uiscrollview,viewdidappear,viewwillappear,Ios,Uiviewcontroller,Uiscrollview,Viewdidappear,Viewwillappear,我的项目中有一个非常奇怪的错误。我有一个UIScrollView作为我的主要大视图。在它里面,我有一个UIViewController(不是UITableViewController),它有一个UITableView实例变量,以及一些杂项uibutton。我已经将视图控制器的视图框设置为CGRectMake(0、64、320、388),因为它上面有一个选项卡栏(这还不起作用)。起初它工作得很好,看起来也很好,但一旦我展示并关闭了一个modalViewController(因此我相信重新加载UIV

我的项目中有一个非常奇怪的错误。我有一个
UIScrollView
作为我的主要大视图。在它里面,我有一个
UIViewController
(不是
UITableViewController
),它有一个
UITableView
实例变量,以及一些杂项
uibutton
。我已经将视图控制器的视图框设置为
CGRectMake(0、64、320、388)
,因为它上面有一个选项卡栏(这还不起作用)。起初它工作得很好,看起来也很好,但一旦我展示并关闭了一个
modalViewController
(因此我相信重新加载
UIViewController
),它会将
UIViewController
的视图推到屏幕顶部(默认设置为
CGRectMake(0,0320460)
,但由于我已将
wantsFullScreenLayout
设置为
,它现在将其设置为
CGRectMake(0,0320388)

我已将此问题跟踪到
viewwillbeen
viewdidebeen
之间的某个位置。以下是我在关闭
modalViewController
后的确切日志:

2011-05-06 11:08:39.974校园[1570:207]帧为0.000000、64.000000、320.000000、388.000000(视图将出现)
2011-05-06 11:08:40.378校园[1570:207]帧为0.000000,0.000000,320.000000,388.000000(视图显示)

正如您所看到的,帧在
视图中将显示
,但在
视图中不会显示

我已经做了以下几件事来修复它:
-在
loadView
viewDidLoad
viewwillbeen
viewdidbeen
中设置所需的帧
-将我的
wantsFullScreenLayout
设置为
NO

-在我的方法重写中终止了我的
[super-viewwillbeen://code>和
[super-viewdidebeen://code>调用


我该怎么办?!?

我这里的问题是,从iOS 4开始,苹果只支持每个窗口一个视图控制器。然而,从iOS 5开始,苹果增加了对容器视图控制器的支持,并向
UIViewController
添加了方法,例如
addChildViewController:
。使用容器视图控制器算法已解决我的问题。有关详细信息,请访问

编辑:对于那些懒得在类引用中搜索“容器视图控制器”的人,以下是类引用中相关部分的要点:

自定义UIViewController子类也可以用作容器视图 控制器。容器视图控制器管理 它拥有的其他视图控制器(也称为其子视图控制器)的内容 视图控制器。子视图可以按原样或在中显示 与容器视图控制器拥有的视图结合

容器视图控制器子类应声明一个公共 接口来关联其子对象。这些方法的性质取决于 这取决于您正在创建的容器的语义。 您需要决定视图可以显示多少子对象 控制器,当这些子对象显示时,以及它们的位置 显示在视图控制器的视图层次结构中。视图控制器 类定义子级共享的关系(如果有的话)。 通过为容器建立一个干净的公共接口,您可以 确保孩子们逻辑地使用其功能,而不访问 关于容器如何实现 行为

容器视图控制器必须关联子视图控制器 在将子视图的根视图添加到视图层次结构之前。 这允许iOS将事件正确路由到子视图控制器和 这些控制器管理的视图。同样,在删除 子视图的根视图与其视图层次结构断开连接 子视图控制器本身。要创建或断开这些 关联时,容器调用由 基类。这些方法不打算由的客户端调用 容器类;它们仅由容器的 实现以提供预期的包含行为


我这里的问题是,从iOS 4开始,苹果只支持每个窗口一个视图控制器。但是,从iOS 5开始,苹果增加了对容器视图控制器的支持,并为
UIViewController
添加了方法,例如
addChildViewController:
。使用容器视图控制器算法解决了我的问题。请访问更多信息

编辑:对于那些懒得在类引用中搜索“容器视图控制器”的人,以下是类引用中相关部分的要点:

自定义UIViewController子类也可以用作容器视图 控制器。容器视图控制器管理 它拥有的其他视图控制器(也称为其子视图控制器)的内容 视图控制器。子视图可以按原样或在中显示 与容器视图控制器拥有的视图结合

容器视图控制器子类应声明一个公共 接口来关联其子对象。这些方法的性质取决于 这取决于您正在创建的容器的语义。 您需要决定视图可以显示多少子对象 控制器,当这些子对象显示时,以及它们的位置 显示在视图控制器的视图层次结构中。视图控制器 类定义子级共享的关系(如果有的话)。 通过为容器建立一个干净的公共接口,您可以 确保孩子们逻辑地使用其功能,而不访问 关于容器如何实现 行为

容器视图控制器必须关联子视图控制器 在将子对象的根视图添加到