如果响应通知而调用view.window.center为0,0,否则为160,284

时间:2014-01-15 22:51:43

标签: ios

我遇到的问题是,如果显示视图是为了响应侦听我的模型提出的通知而显示视图,但是如果直接从其他地方的视图控制器代码调用,则显示该视图。 / p>

原因是我将此视图的中心设置为父视图窗口的中心,即

- (void) viewControllerMethod
{
 MyView *view = (MyView*)[[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0];
    view.center = self.view.window.center;
}

如果从视图控制器中的任何位置调用viewControllerMethod,例如viewDidAppear,则self.view.window.center的值为160,284。但是,如果通过通知中心的通知调用viewControllerMethod,则self.view.window.center为0,0。

我已经通过将self.view.window.center更改为self.view.center解决了我原来的问题。

但是我很想知道为什么窗口的中心根据它的调用方式而有不同的值?

在两种情况下,self.view.center都是160,284,只有self.view.window.center有不同的值。

(请注意,即使强制在主线程上调用viewControllerMethod,它仍会出现此行为)。

1 个答案:

答案 0 :(得分:2)

并不是窗口的中心有不同的值,那个窗口可能根本不存在。根据UIView文档,如果视图尚未添加到窗口,则窗口为nil。

https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW55

顺便说一句,如果你希望MyView始终居中,你可能只想在viewControllerMethod中添加它并将它放在viewDidLayoutSubviews中。 (或使用自动布局。)