2014-11-06 4 views
1

Я пытаюсь заставить UIView сидеть поверх строки состояния, но в настоящее время не имеет успеха. Я попробовал следующее:Позиция UIView выше строки состояния

view.window?.windowLevel = UIWindowLevelStatusBar + 1 // view being a UIView() object 

Я также попытался:

let win: UIWindow = UIWindow() 
win.frame = CGRect(x: 0, y: 0, width: 100, height: Display.height) 
win.windowLevel = UIWindowLevelStatusBar + 1 
win.hidden = false 
win.backgroundColor = UIColor.blueColor() 
win.makeKeyAndVisible() 

Во всех случаях в строке состояния все еще находится на вершине. Кто-нибудь получил это, чтобы работать в Свифт еще?

+0

[Мое решение] (https://stackoverflow.com/a/45640794/5721541) для одной и той же задачи. –

ответ

0

Почему бы вам не скрыть строку состояния? Затем вы можете поместить вид сверху. См. How to hide iOS status bar.

Я не думаю, что можно покрыть панель состояния другим видом, потому что все содержимое находится за панель состояния по умолчанию.

+0

Эй, Том. На некоторых экранах мое приложение должно использовать строку состояния. Я скрываю это только в том случае, когда отображается слайд-меню (так что оно не покрывается сверху баром состояния). Проблема с этим подходом заключается в том, что сцена, с которой я меняю (мгновенно), показывает навигационную панель (слайд вниз), которая прекрасна, но тогда мой программно созданный UIToolbar больше не покрывает содержимое, стоящее за панель состояния, и да, я переопределяю метод positionForBar и установить его значение возврата в UIBarPosition.TopAttached. – PersuitOfPerfection

+0

Я не знаю, правильно ли я вас понимаю. Но это похоже на ошибку. Однако вы можете попытаться встроить свое представление в NavigationController и использовать панель навигации этого контроллера вместо своего пользовательского UIToolbar. – Tom

+0

Вы прочитали эту страницу? https://developer.apple.com/library/ios/qa/qa1797/_index.html – Tom

1

Это мое простое решение (вы также можете использовать MTStatusBarOverlay - проверить git hub).

сначала инициализируйте окно. Сделайте это после того, как вы установили makeKeyAndVisible в основное окно.

self.syncMessageWindow = [[UIWindow alloc] initWithFrame:messageRect]; 
    self.syncMessageWindow.clipsToBounds = YES; 
    self.syncMessageWindow.frame = messageRect; 
    self.syncMessageWindow.windowLevel = UIWindowLevelStatusBar+1.f; 
    self.syncMessageWindow.alpha = 1.f; 

    self.syncMessageView = [[UIView alloc] initWithFrame:messageRect]; 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 2, messageRect.size.width-20, 16)]; 
    [label setTag:100]; 
    [label setTextAlignment:NSTextAlignmentCenter]; 
    [label setFont:[UIFont fontWithName:@"HelveticaNeue" size:12.0]]; 
    [label setTextColor:[UIColor whiteColor]]; 
    [self.syncMessageView addSubview:label]; 
    [self.syncMessageWindow addSubview:self.syncMessageView]; 
    [self.syncMessageWindow setRootViewController:[UIApplication sharedApplication].delegate.window.rootViewController]; 
    [self.syncMessageWindow makeKeyAndVisible]; 
    self.syncMessageWindow.hidden = YES; 

, чем показать сообщение

if(self.syncMessageWindow.hidden == YES) { 
self.syncMessageWindow.hidden = NO; 
[self.syncMessageView setBackgroundColor:color]; 
[self.syncMessageView setAlpha:1.0]; 
[self.syncMessageView setFrame:CGRectMake(0, -20, self.syncMessageView.frame.size.width, self.syncMessageView.frame.size.height)]; 
[self.syncMessageWindow setWindowLevel:UIWindowLevelStatusBar+1]; 
[((UILabel*)[self.syncMessageView viewWithTag:100]) setText:message]; 
[UIView animateWithDuration:.3 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 
    self.syncMessageView.frame = CGRectMake(0, 0, self.syncMessageView.frame.size.width, self.syncMessageView.frame.size.height); 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:.3 delay:2.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 
    self.syncMessageView.frame = CGRectMake(0, -20, self.syncMessageView.frame.size.width, self.syncMessageView.frame.size.height); 
    } completion:^(BOOL finished) { 
    [self.syncMessageWindow setWindowLevel:UIWindowLevelNormal]; 
    self.syncMessageWindow.hidden = YES; 
    }]; 

}]; 

}

Смежные вопросы