2010-11-16 117 views
2

我正在使用loadView以编程方式设置一个UIViewController子类,并想知道如果我得到它的权利。当我在界面生成器中查看我的“Interface.xib”时,它的视图显示0,20,320,460,状态栏在顶部。我的问题是,当我构建应用程序时,视图向上移动(即忽略状态栏)。我正在通过设置视图框架来纠正这个问题,但我有点好奇它为什么不从xib文件进来?loadNibNamed,视图向上移动?

- (void)loadView { 
    NSLog(@"HYBRID UI: %s", __PRETTY_FUNCTION__); 

    NSArray *nibArchive = [[NSBundle mainBundle] loadNibNamed:@"Interface" owner:self options:nil]; 
    UIView *nibView = [nibArchive lastObject]; 
    [nibView setFrame:[[UIScreen mainScreen] applicationFrame]]; 
    [self setView: nibView]; 
} 

欢呼加里

+0

什么是您正在加载视图的父视图?框架坐标相对于父视图。当视图和父级使用applicationFrame时,我遇到类似这样的问题(尽管它向下移动,而不是向上移动)。 – benzado 2010-11-16 15:28:24

+0

另外:你什么时候加载视图?当父视图具有不同的大小(例如CGRectZero)并且视图被layoutSubviews调整大小时,是否有可能将视图添加到层​​次结构中? – benzado 2010-11-16 15:30:31

+0

父窗口是窗口,我使用[window addSubview:[[self controller] view]]从应用程序委托中添加此视图;它只是一个非常简单的测试。 – fuzzygoat 2010-11-16 15:40:09

回答

2

也许认为,从主束加载时,没有得到它在上海华方面的约束。因此得到(x,y)=(0,0)。
你应该尝试将你的视图移动到你的xib中的任何(x,y),并观察这个改变是否成功。

+0

这可能是正确的。使用'NSLog(@“Frame:%@”,NSStringFromCGRect(nibView.frame));'加载后确认帧的原点。 – benzado 2010-11-16 20:24:36

+0

在我使用setFrame之前,来自UIView的框架是Frame:{{0,0}} {320,460}}我感到困惑的是,如果我使用视图尺寸检查器查看IB,它会显示[0 ,20320460] – fuzzygoat 2010-11-17 10:04:18