0

我对工具栏出现在状态栏下方的视图有疑问。

在 Interface Builder 中,我的视图看起来像......

界面生成器

组装视图控制器的代码......

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    self.mainVC = [[ChartVC alloc] initWithNibName:@"ChartVC_iPad" bundle:nil];
    CGRect oldFrame = self.window.frame;
    self.mainVC.view.frame = CGRectMake(0, 20, oldFrame.size.width, oldFrame.size.height - 20);
    self.window.rootViewController = self.mainVC;

    [self.window makeKeyAndVisible];
}

以及它在模拟器中的显示方式...... - (注意底部额外的 20px 空间)

模拟器

所以我的问题是,我怎样才能正确定位工具栏并摆脱底部的空白?

编辑:添加框架代码...

4

3 回答 3

0

您需要允许状态栏。如果根视图控制器是选项卡或导航控制器,这会自动发生,但对您而言并非如此。引用 Apple 的视图编程指南

对于显示不透明状态栏的应用程序,请将视图放在状态栏下方并相应减小其大小。从视图的高度中减去状态栏的高度可以防止视图的顶部被遮挡。

在您的情况下,您需要调整框架mainVC,使其 y 原点偏移状态栏高度(20 分)。

请记住,在 iOS 7 中,状态栏默认不是不透明的,因此您可能需要添加一些额外的代码来处理 iOS 6/7 的差异。

于 2013-09-15T17:57:24.800 回答
0

尝试像这样设置工具栏:

在此处输入图像描述

于 2013-09-15T18:01:05.647 回答
0

将视图控制器设置为窗口的根会将其视图的框架调整为窗口的框架,这与屏幕边界相同,因此包括状态栏。

替换[[UIScreen mainScreen] bounds]][[UIScreen mainScreen] applicationFrame]]which 将返回一个状态栏被切断的矩形,并且您的窗口将在状态栏下方开始,因此您甚至不需要对视图的框架做任何事情,它会被窗口正确设置。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];

    self.mainVC = [[ChartVC alloc] initWithNibName:@"ChartVC_iPad" bundle:nil];
    self.window.rootViewController = self.mainVC;

    [self.window makeKeyAndVisible];
}
于 2013-09-15T18:38:27.373 回答