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



我遇到了一个问题,如果视图是在侦听模型发出的通知时显示的,则视图不会显示,但如果直接从其他地方的视图控制器代码调用,则视图会显示。

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

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

如果从视图控制器内的任何位置调用viewControllerMethod,如viewDidPear,则self.view.window.center的值为160284。但是,如果viewControllerMethod是通过通知中心的通知调用的,那么self.view.window.center是0,0。

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

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

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

(请注意,即使在主线程上强制调用viewControllerMethod之后,它仍然表现出这种行为)。

这并不是窗口的中心有不同的值,而是窗口可能根本不存在。根据UIView文档,如果视图没有添加到窗口中,则窗口为零。

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

顺便说一句,如果你想让MyView始终居中,你可能只想把它添加到viewControllerMethod中,然后把它放在viewDidLayoutSubviews中。(或者使用自动布局。)

相关内容

最新更新