【问题标题】:UIViewController resizing itself between viewWillAppear and viewDidAppear?UIViewController 在 vi​​ewWillAppear 和 viewDidAppear 之间调整自身大小?
【发布时间】:2011-08-20 06:55:14
【问题描述】:

我的项目中有一个非常奇怪的错误。我有一个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)

我已将此问题跟踪到viewWillAppearviewDidAppear 之间的某个位置。这是我关闭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 Campus[1570:207] Frame is 0.000000, 0.000000, 320.000000, 388.000000 (viewDidAppear)

如您所见,框架在viewWillAppear 中很好,但在viewDidAppear 中则不行。

我做了以下事情来尝试修复它:
- 在loadViewviewDidLoadviewWillAppearviewDidAppear中设置所需的帧。
- 将我的 wantsFullScreenLayout 设置为 NO
- 在我的方法覆盖中杀死了我的 [super viewWillAppear:][super viewDidAppear:] 调用。

我该怎么办?!?!?

【问题讨论】:

  • 谁在展示模态视图控制器?
  • 正在调整自己大小的 UIViewController

标签: ios uiviewcontroller uiscrollview viewdidappear viewwillappear


【解决方案1】:

我的问题是,从 iOS 4 开始,Apple 仅支持每个窗口 1 个视图控制器。但是,从 iOS 5 开始,Apple 增加了对容器视图控制器的支持,并在 UIViewController 中添加了方法,例如 addChildViewController:。使用容器视图控制器算法解决了我的问题。访问UIViewController Class Reference了解更多信息。

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

自定义 UIViewController 子类也可以充当容器视图 控制器。容器视图控制器管理 它拥有的其他视图控制器的内容,也称为它的孩子 视图控制器。孩子的观点可以按原样或以原样呈现 与容器视图控制器拥有的视图结合使用。

你的容器视图控制器子类应该声明一个公共的 接口来关联它的孩子。这些方法的性质是 对您而言,取决于您正在创建的容器的语义。 您需要决定您的视图可以显示多少个孩子 控制器一次,当这些孩子显示时,他们在哪里 出现在视图控制器的视图层次结构中。你的视图控制器 类定义了孩子们共享的关系(如果有的话)。 通过为您的容器建立一个干净的公共接口,您 确保孩子们在逻辑上使用它的能力,而不是访问 关于你的容器如何实现的太多私人细节 行为。

您的容器视图控制器必须关联一个子视图控制器 在将孩子的根视图添加到视图层次结构之前与自身。 这允许 iOS 正确地将事件路由到子视图控制器和 这些控制器管理的视图。同样,在它删除一个 子视图与其视图层次结构中的根视图,它应该断开它 来自自身的子视图控制器。制造或破坏这些 关联,您的容器调用由 基类。这些方法不打算由客户端调用 你的容器类;它们只能由您的容器使用 实现以提供预期的遏制行为。

【讨论】:

  • 你如何解决这个问题,你能发布一些例子吗?
  • 请提供代码示例和答案!链接到庞大的 UIViewController 类参考对其他人没有帮助。
  • @TRedman 我的代码自一年前以来发生了很大变化,我认为我不可能给出有用的代码示例。我在编辑中引用了部分类参考
猜你喜欢
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
相关资源
最近更新 更多