1. 程式人生 > >IOS 知識小集(Status Bar變換)

IOS 知識小集(Status Bar變換)

背景

iOS 中經常會有需要在某個介面改變狀態列顏色或者某個介面隱藏狀態列的需求。而改變狀態列顏色和控制狀態列顯示和隱藏的API,在iOS 的不同版本中也發生了很多變化。

iOS 7以前

在iOS 7之前,狀態列是不佔檢視位置的。每個控制器中的根view都是從螢幕的Y軸20px處開始顯示的。所以那個時候整個app狀態列的風格,一般只在plist檔案裡設定【對應於General中的Status Bar Style】。印象裡似乎只有黑白兩種風格,已記不清了!

727768-c282b879ab5287fe.png

iOS 7以前狀態列設定

從API來看,那時候也是支援在程式碼裡修改狀態列的樣式以及顯示和隱藏的。只是因為狀態列對整個APP的影響不大,所以一般在plist裡設定好後,用不著再去修改了。

727768-e38e14e3f4350720.jpg

API

iOS 7 ~iOS 9

從iOS 7開始系統風格大變樣,圖示扁平了,狀態列也不在鬧獨立了。因為狀態列的會受到導航欄或者View背景色的影響,所以狀態列的風格也需要實時調整了。

想要改變狀態列的樣式,想要控制狀態列的顯示與隱藏,該怎麼做呢?

1. 用UIApplication的API

首先,需要在plist檔案裡將【View controller-based status bar appearance】設定為NO,因為它的預設值是YES,然後就可以利用UIApplication 來設定了。

727768-56fc63c400585783.png

plist設定

先上效果動畫:

727768-2890474a44f48630.gif

再上原始碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 - (IBAction)changeStatus:(UISegmentedControl *)sender { if (sender.selectedSegmentIndex == 0) { //        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
// 帶動畫效果,動畫效果其實就是變換的時間變慢了 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES]; else { //        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; // 帶動畫效果,動畫效果其實就是變換的時間變慢了 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; } } - (IBAction)showOrHidden:(UISegmentedControl *)sender { if (sender.selectedSegmentIndex == 0) { // 第二個引數是個列舉型別 [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide]; // 不帶動畫效果 //        [[UIApplication sharedApplication] setStatusBarHidden:NO]; else { [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; // 不帶動畫效果 //        [[UIApplication sharedApplication] setStatusBarHidden:YES]; } }

2. 重寫ViewController方法

首先,要確保plist檔案中【View controller-based status bar appearance】為YES,沒有新增這個key的時候,預設是YES。

727768-cf77ea9a6a656310.png

plist設定

然後在檢視控制器中,重寫如下三個方法即可:

1468764506509119.png

要重寫的方法

因為這三個方法都有預設值,如果我們要的狀體欄樣式什麼的跟預設值效果一致,則不需要重寫;如果不想要預設的效果,則直接在這三個方法裡return 相應的值即可。你不必三個方法都重寫,看實際情況。例如,我想要在這個介面時狀態列為白色,狀態列不隱藏,那麼我只用重寫-preferredStatusBarStyle,like this:

1 2 3 4

相關推薦

IOS 知識Status Bar變換

背景 iOS 中經常會有需要在某個介面改變狀態列顏色或者某個介面隱藏狀態列的需求。而改變狀態列顏色和控制狀態列顯示和隱藏的API,在iOS 的不同版本中也發生了很多變化。 iOS 7以前 在iOS 7之前,狀態列是不佔檢視位置的。每個控制器中的根vi

iOS知識 」2018 · 第 38 期

原文連結 更新:前兩週我們發了一條小集《Xcode 10.1 並沒有修復由於 Assets 引起的在 iOS 9 上的崩潰問題》,根據最新訊息,蘋果已經在伺服器端解決了這個問題,開發者通過 Xcode 10.1 打的 ipa 包在上傳到蘋果後臺,蘋果在處理包的過程中會自動修復。小夥伴們已親自驗證,不會

iOS知識 」2018 · 第 39 期

原文連結 上週公眾號釋出的以下文章: iOS 元件化 —— 路由設計思路分析 Xcode 10.1 新特性概覽 效能之殤(一)-- 天才馮·諾依曼與馮·諾伊曼瓶頸 90% 以上的獨立開發者,敗在了認知環節 本期知識小集的主要內容包括: 忘記 AppleID 賬號安全問題的解

iOS知識 」2018 · 第 40 期

原文連結 在過去的一週,Google 在 Flutter Live 2018 上正式釋出了 Flutter 1.0。這也意味 Flutter 步入正軌,我們可以更多地去嘗試這門技術。關於 Flutter 1.0 更多的資訊,可以檢視 Flutter 1.0 正式版: Google 的便攜 UI 工具包

iOS知識 」2018 · 第 42 期

原文連結 上週公眾號釋出的以下文章: 一些 RxSwift 思考題 CocoaPods 都做了什麼? 初步探索LaunchScreen 使用 Metal 和 Core ML 評價照片質量 本期知識小集的主要內容包括: 使用 Named UIColor Diff:/Pod

iOS知識 第三期

這一期主要有三個內容: Tint Color Build Configurations in Swift 鍵盤事件 Tint Color 在iOS 7後,UIView新增加了一個tintColor屬性,這個屬性定義了一個非預設的著色顏色值

老司機週報x知識xSwiftGG:iOS 內推職位召集

最近很多公司的裁員的訊息相信大家都有所耳聞,與此同時也有不少公司逆勢而上在持續招聘技術人員。因此我們三大組織決定牽頭收集一些可靠的招聘,元旦結束後在我們的資訊釋出渠道上釋出 iOS 內推職位專題文章。 職位要求 一條基本原則是:職位必須有吸引力。一個平庸沒競爭力的崗位就不要發上來了。所以務必在職位介紹中讓

web前端知識筆記

jquery getview 例如 get del tar and 條件語句 arguments 1.if條件語句相關 對於 if 語句括號裏的表達式,ECMAScript 會自動調用 Boolean()轉型函數將這個表達式的結果轉換成一個布爾值。如果值為 true,執行

iOS 大批量彈幕粒子彈幕

etime 朋友 ios 模式 任務 監測 strong nts tab 一、現狀 如今直播類、視頻播放器等基本都有彈幕模式。 為了保持性能和內存可控,基本是在初始化的時候生成一個Pool(Pool的容量是設定好的), 也就是利用重用機制(可以想象一下UITableView

IQKeyboardManager 狀態欄status bar問題

shared hack inset control gin begin available ear 說明 因為懶,所以具體什麽樣子,參考下面的鏈接 具體的問題情況參考:StatusBar background problem #1158 我解決的思路很簡單,就是在監

ios中改變程式的status bar

有兩種: 一、在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中新增 [UIApplication

css3的一個demo箭頭hover變化

rotate osi ping align pos ref block translate -m 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta char

js基礎知識第二天邏輯運算符

tex 2個 cnblogs text 黑白 javascrip 簡單 data- log 今天學習了2個知識點,數據類型轉換,邏輯運算符。這個2個知識點比較簡單,會用就可以。 邏輯運算符 邏輯運算只有2個幾個,一個為true,一個為false 且&&

IOS 自定義按鈕代碼實現+九宮格

uifont 排列 end uiview height iyu void rec name 在一些下載應用裏整個頁面都是按鈕,有好多好多,但是仔細觀察不難發現他們很有規律。就像下面一樣?? 很有規律的排列在屏幕上,那麽這需要我們怎麽去做能。 正如標題,我們需要了解兩個知

IOS 應用跳轉 IOS9白名單

tom super created reat 獲取 import 字符 ges ict 跳轉到指定app的實現 IOS中應用的跳轉是通過URL實現的,因此在實現應用跳轉之前我們要設置一下對應的URL。 圖一(尋找配置軟件的URL) 圖二(具體配置選項) 註意: 如果IO

Filebeat 關鍵字多行匹配日誌采multiline與include_lines

filebeat 關鍵字多行匹配日誌采集(multiline與include_lines)很多同事認為filebeat采集日誌不能做到多行處理,今天這裏討論下filebeat的multiline與include_lines。 先來個案例,以下日誌,我們只要求采集error的字段,2017/06/22 11:2

python簡單程序99乘法表

while 解釋 兩個 位與 顯示 con pri 數字 i+1 1. #99乘法表#第一種 for i in range(1,10): s=‘‘ for j in range (1,i+1): s+=str(j)+‘*‘+str(i)+‘

(轉)View Transform視圖變換詳解

camera 1.0 posit 朝向 復制 3d圖 過程 product 變量 原文作者講得太好了,唯有這篇讓我對視圖矩陣了解的清晰了很多。 ----------------------------------------------------------------

vue 實現 ios 原生picker 效果實現思路分析

sta 效果 cursor touchend orm dex tex sub alt 以前最早實現了一個類似的時間選擇插件,但是適用範圍太窄,索性最近要把這個實現方式發布出來,就重寫了一個高復用的vue組件。 支持安卓4.0以上,safari 7以上 效果預覽 gitHu

Knight Tournament 偽並查區間合並

rst hat put cif after line spec class std Knight Tournament Hooray! Berl II, the king of Berland is making a knight tournament. The kin