Скрытие строки состояния iPhone подтягивает мой стол на 20 пикселей вверх

При выполнении асинхронного HTTP-запроса я скрываю строку состояния iPhone и анимирую в моем собственном пользовательском UIViewController, чтобы показать статус загрузки. Таким образом, вместо того, чтобы видеть мощность сигнала, носитель, время и время автономной работы, пользователь получает сообщения, основанные на ходе выполнения HTTP-запроса. Моя строка состояния имеет высоту ровно 20 пикселей и хорошо вписывается в то место, где раньше была строка состояния. Когда активность 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] вы не можете увидеть мое пользовательское представление. Как я могу сделать так, чтобы мой пользовательский вид просто отображался поверх строки состояния, чтобы мне не приходилось его скрывать?

Спасибо!


person Justin    schedule 30.05.2010    source источник


Ответы (2)


Сделайте свой особый вид отдельным окном UIWindow. Установите для параметра windowLevel UIWindow значение UIWindowLevelStatusBar. Если он все еще не наверху, вы можете использовать принестиSubviewToFront: в UIWindow (помните, UIWindow - это UIView), чтобы вывести его на вершину этого уровня.

person Rob Napier    schedule 30.05.2010

Ответ здесь:

Добавить UIView поверх всех других представлений, включая строку состояния

Необходимо создать UIWindow и установить для его свойства windowLevel значение statusBarLevel.

person Justin    schedule 30.05.2010