Сокрытие строки состояния iPhone тянет мою таблицу - PullRequest
2 голосов
/ 30 мая 2010

При выполнении асинхронного 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] Вы не можете видеть мой пользовательский вид. Как сделать так, чтобы мой пользовательский вид просто отображался в верхней части строки состояния, чтобы мне не пришлось его скрывать?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 мая 2010

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

0 голосов
/ 30 мая 2010

Ответ здесь:

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

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

...