0

我再一次搜索了大约 45 分钟来寻找这个问题的答案,我想我可能已经找到了答案,但是我正在阅读的情况与我遇到的情况并不完全一样。

当我添加我的视图时,它似乎没有完全覆盖窗口我能够摆脱顶部的状态栏但底部有一部分空间没有被视图覆盖

替代文字 http://img177.imageshack.us/img177/8844/picture1zjv.png

正如您从屏幕截图中看到的那样,有一个橙色条......它是橙色的,因为我知道它实际上在下面是什么(这是 viewController 的视图,但我尝试的一切似乎都无法让添加的视图覆盖屏幕。

这是唯一运行的代码

  • (void)viewDidLoad { [超级 viewDidLoad]; [self.view addSubview:mainMenu]; }

任何帮助,将不胜感激。

4

4 回答 4

1

您应该发布您的代码,但通常,您可以使 UIView 填充屏幕,如下所示:

UIView *foo = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];

您可以稍后设置框架:

foo.frame = CGRectMake(0,0,320,480);

要填充屏幕,您应该在原点 (0,0) 使用 320 x 480 矩形。这就是上面的 CGRectMake 函数创建的。

于 2009-08-14T03:50:03.453 回答
1

有几件事可能会出错:

你的框架可能太短了。你viewDidLoad:可以添加一个调试语句来检查它的高度:

NSLog(@"Height is %f", self.view.frame.size.height);

看起来您希望该值为 480,即屏幕的全高。

你的出身可能太高了。同样检查您的 y 偏移量:

NSLog(@"y origin is %f", self.view.frame.origin.y);

看起来您希望该值为 0。

您的 superview 的来源可能太高了。假设你这个视图只有一个超级视图,这段代码将帮助检查你的视图原点的绝对坐标:

CGPoint absoluteOrigin = [self.view convertPoint:self.view.frame.origin
                                          toView:self.view.superview];
NSLog(@"y origin in superview is %f", absoluteOrigin.y);

您可以只标记一些额外.superview的 's 以根据先前的视图找出坐标。

顺便说一句,您可能想要做这样的事情来获得完整的高度,而不是仅仅在代码中使用 480 作为幻数:

CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
CGFloat screenHeight = appFrame.size.height;

applicationFrame属性考虑是否显示状态栏。

于 2009-08-14T05:33:56.413 回答
1

我以前遇到过这个问题,我只是通过将视图向下移动 20 像素来解决它......当你使用界面构建器时,它有那个漂亮的小“模拟状态栏”或“模拟工具栏”功能,但我认为它有点 finnicky .

不过,Andrew 和 Tylers 的答案都应该有效,以编程方式做事并不丢人 :)。如果您在界面生成器中创建东西,只需执行 Andrew 的第二行,不需要重新初始化。

于 2009-08-14T06:58:15.497 回答
0

好吧,好吧,我想通了,现在我觉得有点愚蠢...我回到 IB 并意识到每个视图的高度设置为 460 而不是 480...你们确实给了我很多很好的信息我很感激这一切。我希望我可以将它们全部标记为答案。

再次感谢你,生物武器公约

于 2009-08-14T13:41:16.647 回答