【问题标题】:UIViewController frameUIViewController 框架
【发布时间】:2011-08-04 15:07:22
【问题描述】:

我有以下设置。

一个带有 UIScrollView 的 pagingScrollViewController 作为它的视图 (self.view = scrollView)。 在该滚动视图中,我将 rootViewController 的视图添加为子视图。 rootViewController 的视图是一个 UIView,我在其上添加一个或另一个视图(取决于内部逻辑)。

UIScrollView 使用等于 applicationFrame 的帧进行初始化,因此为 0、20、320、460。这很好,因为顶部有状态栏。

将rootViewController的视图添加到滚动视图时出现问题。在 rootViewController 的创建过程中,它的视图是在 -loadView 中设置的,在我的例子中它仍然被注释掉。这样标准的appel loadView就处理好了。

它给了我一个视图,它也有一个 0、20、320、460 的帧。这不是我想看到的那样,因为现在 rootViewController 的视图被删除了 40 像素从实际 iPhone 屏幕的顶部。

现在,通过在 -loadView 中手动设置 rootViewControllers 视图或在 -viewDidLoad 中为其分配 y 设置为 0 的框架,这当然很容易解决;

但我无法想象这是苹果打算这样做的方式。我没有使用 Interface builder,所以也许这就是问题所在,苹果打算让我使用 IB,但我在这个问题上很固执:)

我是否以错误的方式使用 viewControllers?这似乎是将scrollView的逻辑与其他视图的逻辑分开的好方法。

将第二个 UIViewController 的视图添加到第一个 UIViewController 的视图中的正确方法是什么?其中第一个 viewController.view 接收到 0、20、320、460 的帧。而第二个 controller.view 接收到 0、0、320、460 的帧(所以基本上是第一个 controller.view 的边界)

其中有很多使用控制器和视图这个词,但希望问题很清楚。

【问题讨论】:

  • 你是如何初始化 rootViewController 的视图框架的?
  • 我不是,这就是魔法在起作用。如果您不覆盖 -loadView,系统会为您创建一个视图。不幸的是,帧为 0,20,320,460。
  • 这就是答案本身。您的 rootViewController 具有系统提供的帧 0,20,320,460。因此,当您将其添加到正常的视图时,y=20 会相对较低。
  • 注意:“在该滚动视图中,我将 rootViewController 的视图添加为子视图”。 Apple 声明:显示的屏幕只有一个视图控制器。如果您的 pagingScrollView 控制器不属于 rootViewController 您将收到级别 = 2 的内存警告。
  • @inovaction...感谢您的提示!

标签: iphone ios uiview uiviewcontroller uiscrollview


【解决方案1】:

回答我自己的问题...

拉文是对的。 在阅读了 loadView 方法和apple's view controller programming guide 之后,我得出的结论是这是系统的默认行为。如果您想要其他任何东西,请覆盖 -loadView 并自己做。实际上,Apple 声明如果您不使用 NIB,则应该覆盖 -loadView 以创建至少一个基本的简单视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多