2014-11-06 46 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; 
    }]; 

}]; 

}