2014-11-06 93 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)。 – 2017-08-11 18:58:02

回答

0

为什么不隐藏状态栏?然后,您可以将视图置于顶部。见How to hide iOS status bar

我不认为有可能用另一个视图覆盖状态栏,因为默认情况下所有内容都位于状态栏的后面。

+0

嘿汤姆。在某些屏幕中,我的应用程序需要使用状态栏。我只在显示滑出菜单时隐藏它(所以它没有被顶部的状态栏覆盖)。这种方法的问题是,我改变(即时)的场景,然后显示导航栏(向下滑动anim)这是很好,但是然后我的编程创建的UIToolbar不再覆盖状态栏后面的内容,是的,我是压倒一切positionForBar方法,并将它的返回值设置为UIBarPosition.TopAttached。 – PersuitOfPerfection 2014-11-06 14:18:02

+0

我不知道我是否正确理解你。但这看起来像一个错误。但是,您可以尝试将视图嵌入到NavigationController中,并使用此控制器的导航栏而不是定制的UIToolbar。 – Tom 2014-11-06 14:28:54

+0

您确实已阅读此页? https://developer.apple.com/library/ios/qa/qa1797/_index.html – Tom 2014-11-06 14:34:52

1

这是我简单的解决方案(您也可以使用MTStatusBarOverlay - 检查git集线器)。

首先初始化窗口。在您的主窗口上设置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; 
    }]; 

}]; 

}