【问题标题】:Hiding iPhone Status Bar pulls my tableViews up by 20px隐藏 iPhone 状态栏将我的 tableViews 拉高 20px
【发布时间】:2010-05-30 03:13:04
【问题描述】:

在执行异步 HTTP 请求时,我隐藏 iPhone 状态栏并在我自己的自定义 UIViewController 中设置动画以显示上传状态。因此,用户不会看到信号强度、运营商、时间和电池寿命,而是根据 HTTP 请求的进度获取消息。我的状态栏正好是 20px 高,非常适合以前的状态栏。当 HTTP 活动完成后,自定义视图会以动画方式退出,而 iPhone 状态栏则会以动画方式重新进入。

我想避免完全隐藏 iPhone 状态栏,而是将我的自定义视图放在状态栏的顶部。目前,如果我调用我的自定义视图动画并将 iPhone 状态栏设置为可见,我的自定义视图就在它后面。

这是我的代码:

-(void) animateStatusBarIn {
        CGRect statusFrame = CGRectMake(0.0f, -20.0f, 320.0f, 20.0f);
        UploadStatusBar *statusView = [[UploadStatusBar alloc] initWithNibName:@"UploadStatusBar" bundle:nil];
    self.status = statusView;
    [statusView release];
    status.view.frame = statusFrame;
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
    [window addSubview:status.view];
    [UIView beginAnimations:@"slideDown" context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationFinished:)];
    status.view.frame = CGRectMake(0.0f, 0.0f, 320.0f, 20.0f);
    [UIView commitAnimations];

}   

-(void) animateStatusBarOut {
    [UIView beginAnimations:@"slideUp" context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationFinished:)];
    status.view.frame = CGRectMake(0.0f, -20.0f, 320.0f, 20.0f);
    [UIView commitAnimations];
}

-(void)animationFinished:(NSString *)name {
    if ([name isEqualToString:@"slideDown"]) {

    }
    if ([name isEqualToString:@"slideUp"]) {
            [[UIApplication sharedApplication]setStatusBarHidden:NO animated:YES];
        [status.view removeFromSuperview];
    }


}

没有 [[UIApplication sharedApplication]setStatusBarHidden:YES animated:YES] 你看不到我的自定义视图。如何让我的自定义视图只显示在状态栏的顶部,这样我就不必隐藏它了?

谢谢!

【问题讨论】:

    标签: iphone uiviewcontroller uiapplicationdelegate


    【解决方案1】:

    让您的特殊视图拥有自己的 UIWindow。将 UIWindow 的 windowLevel 设置为 UIWindowLevelStatusBar。如果它仍然不在顶部,您可以在 UIWindow 上使用 bringSubviewToFront:(请记住,UIWindow 是 UIView)将其带到该级别的顶部。

    【讨论】:

      【解决方案2】:

      在这里回答:

      Add UIView Above All Other Views, Including StatusBar

      必须创建一个 UIWindow 并将它的 windowLevel 属性设置为 statusBarLevel。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-05
        • 1970-01-01
        • 2011-04-29
        相关资源
        最近更新 更多