2014-04-04 70 views
3

我正在開發一個iPhone應用程序,它僅在用戶選擇日期時顯示日期選擇器。當顯示日期選擇器時,屏幕的其餘部分將變暗,因此日期選擇器上的視覺焦點更多。此效果目前通過在屏幕大小上添加部分不透明的黑色按鈕並將datePicker作爲子視圖來實現。到目前爲止沒有問題。調暗iOS7狀態欄

問題是狀態欄不受影響。因爲我的狀態欄是白色的,所以只有當屏幕的其他部分變暗時纔會變得更加顯着。我希望狀態欄也變暗/變暗。

我已經看到一個應用程序,正是我想要的。我搜索了很多,但我不知道如何實現它。有什麼辦法可以設置狀態欄的不透明度,或者將其與另一個視圖重疊嗎?

任何幫助表示讚賞。

+0

狀態欄與信號強度,時間和電池電量一樣嗎? –

+0

@MarcusAdams是的。 –

+0

爲什麼不在顯示日期選擇器時隱藏狀態欄,然後在選擇日期後顯示它? –

回答

4

這很簡單。你需要做的是創建一個UIWindowUIWindowLevelStatusBar級別。這將重疊狀態欄。以下是示例代碼:

UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 

window.windowLevel = UIWindowLevelStatusBar; 
window.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.7f]; 

[window makeKeyAndVisible]; 

您可以將視圖添加到此窗口。他們甚至可以重疊狀態欄。請記住存儲對新窗口的引用,否則它將被解除分配。

如果你想控制的狀態欄的外觀,或獲取有關旋轉事件的信息,你應該創建一個UIViewController並將其設置爲你的winndow的rootViewController。然後,如果你想在狀態欄樣式改變爲光,在視圖控制器中添加以下代碼:

- (UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
} 
+1

窗口**必須保留,否則將被刪除。系統不保留窗口。另外,向窗口添加子視圖相當困難,因爲旋轉支持會影響開發人員。另一方面,根視圖控制器是兩全其美的。 –

+0

@LeoNatan,感謝您的反饋。我在答覆部分添加了關於保留窗口的內容。我不同意添加子視圖很困難。這和調用'addSubview:'一樣簡單。事實上,我們正在放棄輪換支持,但有時候我們不關心它(如果我們只支持肖像模式)。 – RaffAl

+0

沒有理由不在視圖中使用根視圖控制器(即使是日期選取器本身!)。它甚至會是透明的。沒有理由限制輪換。 –

0

你可以嘗試尋找RMDateSelectionViewController,讓你挑選數據的能力在UIActionSheet風格(這樣的研究背景是變灰)。

+0

我看了一下這個項目,但並沒有讓狀態欄變暗。就像我的應用程序一樣,它使用半透明的黑色視圖來覆蓋主視圖。使用白色狀態欄時,顯然黑色視圖不包含狀態欄。 – Tuslareb

1

這裏有幾個選項。

  1. 隱藏狀態欄。這是最簡單的 - 隱藏它,顯示你的選擇器,選擇日期,顯示狀態欄,隱藏選擇器。此外,如果您將日期選擇器顯示/隱藏的顯示和隱藏放在同一個動畫塊中,它將同步動畫。

  2. 根據@reecon的建議,爲您的選取器使用一個窗口,其級別爲UIWindowLevelStatusBar + 1。這個問題很複雜,但並不重要。根據經驗,我建議您直接使用簡單的視圖控制器或者直接使用內容視圖,或者使用根清除顏色視圖來保存內容視圖。您可以通過[UIView transitionWithView:window duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ [window makeKeyAndVisible]; } completion:nil;爲窗口設置動畫效果。請記住保留窗口,否則您將不會看到它,因爲它已被釋放;系統不保留窗口。 查看我的LNWindowManager庫,以獲得更簡單的窗口展示API。

  3. 僅在狀態欄框架頂部顯示覆蓋窗口。這比較容易維護,因爲只要狀態欄框發生變化,您就可以將窗口大小調整到狀態欄框。