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子类也可以用作容器视图
控制器。容器视图控制器管理
它拥有的其他视图控制器(也称为其子视图控制器)的内容
视图控制器。子视图可以按原样或在中显示
与容器视图控制器拥有的视图结合
容器视图控制器子类应声明一个公共
接口来关联其子对象。这些方法的性质取决于
这取决于您正在创建的容器的语义。
您需要决定视图可以显示多少子对象
控制器,当这些子对象显示时,以及它们的位置
显示在视图控制器的视图层次结构中。视图控制器
类定义子级共享的关系(如果有的话)。
通过为容器建立一个干净的公共接口,您可以
确保孩子们逻辑地使用其功能,而不访问
关于容器如何实现
行为
容器视图控制器必须关联子视图控制器
在将子对象的根视图添加到