1. 程式人生 > >關於 Swift 中重寫 preferredStatusBarStyle 不起作用問題解決方案

關於 Swift 中重寫 preferredStatusBarStyle 不起作用問題解決方案

前言:本次使用的 Swift 版本為 4.2 版本,所以程式碼上與之前版本的寫法會有不一樣的地方, 但思路都如此。那我就根據自己的專案簡單說下解決辦法, 又更好辦法的, 也請大牛留言探討, O(∩_∩)O謝謝!

分析:
  • iOS9 之前使用 UIApplication.shared.statusBarStyle = .lightContent 可以更改狀態列的前景顏色, 但也改變了全域性的, 所以在 iOS9 之後蘋果推薦使用 preferredStatusBarStyle 在對應的 UIViewController 中靈活改變狀態列前景色, 但總會遇到重寫完了不管用的結果, 也是讓人很鬱悶。
步驟:
  • 首先需要在專案 targets 中的 info.plist 檔案中將 View controller-based status bar appearance 設定為 NO;
  • 如果UIViewController是存在於自定義的UINavigationController中,需要在自定義的UINavigationController中重寫childForStatusBarHiddenchildForStatusBarStyle兩個方法:
為什麼要重寫這個東西呢?
因為這兩個方法預設返回值是nil

也就是當我們呼叫setNeedsStatusBarAppearanceUpdate

的時候,系統會呼叫Container(容器控制器)的preferredStatusBarStyle這個方法(window?.rootViewControllerpreferred的方法,一般我們用UINavigationController或者UITabBarController來做Container),也就是根本不會呼叫子控制器(我們所看到的UIViewcontroller)的preferredStatusBarStyle方法。
這個時候childForStatusBarHiddenchildForStatusBarStyle兩個方法就派上用場了。

// 重寫這兩個方法
override
var childForStatusBarHidden: UIViewController? { return self.topViewController } override var childForStatusBarStyle: UIViewController? { return self.topViewController }
  • 最後在需要改變狀態列顏色的UIViewController中重寫preferredStatusBarStyle方法:
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

相關推薦

關於 Swift 重寫 preferredStatusBarStyle 作用問題解決方案

前言:本次使用的 Swift 版本為 4.2 版本,所以程式碼上與之前版本的寫法會有不一樣的地方, 但思路都如此。那我就根據自己的專案簡單說下解決辦法, 又更好辦法的, 也請大牛留言探討, O(∩_∩)O謝謝! 分析: 在 iOS9 之前使用

Struts2JSTL標籤作用解決辦法

1.設定某個jsp頁面使用el表示式,需要在jsp頁面加上(控制單個頁面) <%@ page isELIgnored="false"%>  //我設定了這點就可以了, 2.看你的web.xml檔案中頭的引用應該是 2.4.xsd <web-app id="WebApp_

Chrome瀏覽器autocomplete="off"作用解決方案

統一 type toc 網上 word 清除 登錄 保存 input 多數瀏覽器默認會緩存input的值,只有使用ctl+F5強制刷新的才可以清除緩存記錄。 如果不想讓瀏覽器緩存input的值,有2種方法: 方法一: 在不想使用緩存的input中添加 autocompl

'autocomplete="off"'在Chrome作用解決方案

最近專案中遇到一個令人頭疼的問題,查閱各種資料,嘗試各種方法,最終得以解決;哎···下面就說說這心酸的歷程吧。 大家都知道autocomplete屬性是表單欄位中的HTML5新屬性,該屬性有兩種狀態值,分別為"on" 和 "off",該屬性可省略:省略屬性值後預設值為"

servlet3.0註解loadOnStartup作用解決方案

color fig 運行 exc back tar med -c spa   多次嘗試3.0在源碼中直接用註解配置loadOnStartup=1,即web應用啟動時創建servlet實例,發現不起作用,但是在web.xml配置則可以正常運行。先上源碼。 package l

手機端input[type=date]的時候placeholder作用解決方案

手機端input[type=date]的時候placeholder不起作用解決方案   目前PC端對input 的date型別支援不好,我試下來的結果是隻有chrome支援。firefox、IE11 都不支援。而且PC端有很多日曆控制元件可供使用。就不去多考慮這點了。 那麼在移動端

Git忽略檔案作用解決方案

       開發過程中由開發工具生成的檔案一般不需要提交,但每次開發工具會自動去修改這些檔案,每次都要去提交這些東西,不提交會有一系列問題,很煩人。        可以通過配置.gitignore檔案讓git不在跟蹤記錄這些檔案。心血來潮去配置的時候,發現配

web.xml error-page 作用解決方案

今天遇到一個問題(應該是個老問題,但網上答案各異),記錄下來  在web.xml中配置錯誤頁面跳轉如下:  <error-page>  <exception-type>java.lang.Exception</exception-type>

springmvc mybatis 註解的方式 事務作用解決方案

1、使用springmvc導致事務不起作用時,首先檢視是否元件重複掃描問題導致        由於採用的是SpringMVC、 MyBatis,故統一採用了標註來宣告Service、Controller。伺服器啟動時的載入配置檔案的順序為web.xml---root-con

autocomplete="off" 作用解決方案

autocomplete屬性是表單欄位中的HTML5新屬性,該屬性有兩種狀態值,分別為"on" 和 "off",該屬性可省略:省略

解決ScrollView滑動過程ScrollTo()方法作用的問題

原文 本篇文章作為新的類別 “Android經驗之談” 開篇之作,記錄實際開發中遇到的比較“奇怪”的問題以及解決方案,不求長篇大論,但求短小精悍,一兩句話講明問題及解決方案,畫龍點睛,一語道破天機。 有時候,一句提醒,能讓人豁然開朗,少走很多彎路。 案例:閱讀軟

iOS Git建立gitignore檔案, gitignore 作用解決辦法

1.建立gitignore檔案 開啟終端, cd 進入到專案所在目錄,輸入touch gitignore即可, 然後編輯 gitignore, 編輯成功之後, mv gitignore .gitignore換名字, 這個時候.gitignore檔案會自動消失, 點檔案不能顯示的. 在該資料夾下打

Shiro unauthorizedUrl 作用解決方法

Shiro 通過註解方式判斷當前使用者沒有許可權時,跳轉不到指定的錯誤頁面,就是因為 unauthorizedUrl 不起作用,解決方法就是在 shiro 配置中加上下面這一段配置(異常全路徑做key,錯誤頁面做value) <bean class="org.springfram

微信小程式設定height 100% 作用解決辦法

https://blog.csdn.net/wshpwangshiyu/article/details/79744884 問題:微信小程式設定背景圖片高度適應整個螢幕,設定height 100% 不起作用? .container-all{ width: 100%; he

JSPEL表示式作用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

BrowserSync的大坑,監聽作用解決辦法,附gulp瀏覽器同步自動重新整理部署方法

                能將本地伺服器代理到localhost:3000/localhsot:3001的操作:按照官網來操作的程式碼是不起作用的:browser-sync start --proxy "127.0.0.1:8081" "E:/newcrm/trunk/4_Tools/crm/**/*.

Qt 佈局設定stretch,作用解決方法

addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment()) insertStretch(int index, int stretch = 0) setStretchFactor(

jspEL表示式作用的問題

SpringMVC過程中出現異常,開發環境如下: 開發工具:IDEA JDK:1.8.0_65 Spring Version:4.2.4 Servlet Version:3.1.0 Maven:3.3.0 問題:在jsp頁面中使用el表示式

SpringMVC的JSP頁面EL表示式作用${}

解決方法: 在使用el表示式的jsp中配置: <%@page isELIgnored=”false” %> 該設定代表在本jsp中使用el表示式,可以解析其中的值。若isELIgno

View控制元件android:drawablePadding作用的原因探究

我們在使用android:drawablePadding的時候,經常會出現設定了以後會不起作用,先來看一下程式碼:<?xml version="1.0" encoding="UTF-8"?>