【问题标题】:Overriding internal UIViewController methods because an internal method is giving me bugs覆盖内部 UIViewController 方法,因为内部方法给了我错误
【发布时间】:2011-04-12 03:48:29
【问题描述】:

重写内部 UIViewController 方法的后果是什么?

[UIViewController viewDidMoveToWindow:shouldAppearOrDisappear:] 给我带来了一些问题。它会将我的框架调整为我不希望的值有时。我什至不知道它在哪里挑选新框架的值(它接近我添加它的超级视图的大小,但相差 2px)。参考:this question, which I also need some help with.

我尝试在我的视图控制器中定义一个空的- (void)viewDidMoveToWindow:(UIWindow *)window shouldAppearOrDisappear:(BOOL)flag 方法。虫子不见了。 >.

有谁知道覆盖-viewDidMoveToWindow:shouldAppearOrDisappear: 是否可以这样做?或者其他一些解决方法?

或者,有谁知道-viewDidMoveToWindow:shouldAppearOrDisappear: 何时以及为什么喜欢更改我的框架尺寸有时

提前致谢。

【问题讨论】:

  • 嗨,我也有同样的问题。你最后提交了一个错误吗?

标签: iphone objective-c cocoa-touch ipad uiviewcontroller


【解决方案1】:

如果您覆盖该方法,您将面临被拒绝的风险,它是无证的。一种不违反规则的方法是在视图控制器中覆盖视图的setFrame: 方法。

如果您认为这是一个错误,请整理一个最小的测试用例并将其提交给http://bugreport.apple.com,并可能将其上传到我们也可以确切看到发生了什么的地方。

【讨论】:

  • 应用被拒绝是我最关心的问题。我将尝试 setFrame 覆盖方法。
  • 我仍然很想知道为什么 viewDidMoveToWindow:shouldAppearOrDisappear: 有时会尝试调整我的框架。
  • 我肯定会提交错误报告。我不确定为什么会这样。
【解决方案2】:

对于您问题的“为什么”部分;框架可以在两种情况下自动改变:

  1. 您的 ViewController 是视图控制器层次结构(导航或 TabBar)的一部分。在这种情况下,您的父 ViewController 可以随心所欲地使用您的视图框架。
  2. 您的视图允许自动调整大小并且父视图会更改大小。这里需要注意的是,根视图的大小会更改为适合屏幕,从而导致所有子视图都发生自动调整大小。

要找到您的情况的确切罪魁祸首,您可以在覆盖的 setFrame: 中设置断点。

【讨论】:

  • 有问题的视图不是直接添加到视图控制器层次结构中的视图,而是一个子视图的子视图。也没有父视图改变大小。反正我不确定这个问题是否还存在,这是在iOS 3.2中遇到的。
  • @altealice 我只是想在你的案例中找到确切的罪魁祸首,因为我自己也经历了奇怪的事情(来自 UINavigationController)。我不知道这在上一个 iOS 中是否已修复,但根据我使用 UINavigationController 的经验,如果您的视图有视图控制器(无论嵌入其他视图的深度如何),您可能会遇到奇怪的帧变化。跨度>
  • 我明白了。感谢您分享您的发现。也许有一天我们可以发现它真的是固定的,或者至少找到发生这种情况的确切情况。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2021-10-04
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
相关资源
最近更新 更多