【问题标题】:self.view.frame/bounds of UIViewController changed between viewDidLoad and viewWillAppear iOS8UIViewController 的 self.view.frame/bounds 在 vi​​ewDidLoad 和 viewWillAppear iOS8 之间改变
【发布时间】:2015-06-02 14:47:52
【问题描述】:

我的 iPhone 应用程序中的视图有一个非常奇怪的问题。

我有两个UIViewController 子类AB

BUIViewController(我们称之为b)从UIViewControllerUIViewController 内部的方法调用(a)。 但是当显示b 时,b 的“根”视图的框架和边界在viewDidLoadviewWillAppear 的调用之间发生了神奇的变化。 我不知道,为什么会这样。据我所知,我所有的其他观点都没有这个问题。

这些是框架和边界:

viewDidLoad:

self.view.frame: {0, 0}, {375, 667}

self.view.bounds: {0, 0}, {375, 667}

viewWillAppear:

self.view.frame: {0, 64}, {375, 554}

self.view.bounds: {0, 0}, {375, 554}

我做了一个截图来演示这个问题。 黄色区域是bself.view。红色和绿色的是self.view 的子视图。他们只是为了我的布局。我认为它们对 self.view 框架或边界没有任何影响。

有谁知道是什么导致了这个问题?

【问题讨论】:

  • 没有问题。 viewDidLoad 中的视图框架尚未最终确定。这很正常。不要依赖它。
  • 您必须在viewWillAppear 或更高版本中完成所有与视图位置相关的代码。 viewDidLoad 仅表示视图已加载,但视图尚未处于最终位置。
  • 好的,但是为什么在其他视图控制器中不会发生这种情况呢?或者这只是一个巧合,它适用于其他人?
  • @RoryMcKinnel 很可能在viewDidLoad 中完成所有与视图位置相关的代码。我一直都这样做。但这需要正确设置框架和子视图的autoreszingMask
  • @rmaddy 是的。应该是“你更安全”而不是“你必须”。正如你所说,如果你把所有东西都锁定了就可以了。

标签: ios objective-c uiview uiviewcontroller viewwillappear


【解决方案1】:

好的,经过数小时(字面意思!)的调试后,我发现了我的错误:我忘记在我的自定义初始化方法中调用 self = [super init];。这导致了一些奇怪的行为。

感谢您提供帮助的 cmets!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2013-03-28
    相关资源
    最近更新 更多