UIViewController如何設置背景色

UIViewController如何設置背景色?

很多人會很快回答: self.view.backgroundColor = UIColor.whiteColor 非常正確,我是離開了公司才知道這樣設置是正確的!

跟我來看一個實際的項目,我接手這個項目的時候,這個項目已經快2年了,期間不知多少同事在完善這個代碼。我們一個iOS小組大概有4個同事在同時維護這個項目。突然有一天UI設計找到我說這個界面的背景色不對,淡了些。然後我就去查看了下代碼發現這個界面的背景顏色是和別的不一樣。(一般App背景顏色都是一樣的,我們在這個大前提下討論這個話題。)

然後我就準備修改。項目的顏色是用宏定義的,相信很多同學都是這麼寫的。我查找了下整個項目後發現這個背景色設置的是五花八門,有的是用宏(項目裏面居然用了2個顏色宏,而且顏色就差一點),恐怖的是這兩個顏色宏在別的地方也在被使用,有的地方直接寫 self.view.backgroundColor = UIColor.whiteColor(以前就沒人檢查UI麼) ,有的甚至都沒寫(應該是完全被view覆蓋了)。

這裏我犯了個錯誤(如果用上面的說的答案可能就沒後面那麼多事情了),我偷懶的毛病犯了,一個個改太累了還容易漏了(藉口),要是我在後面兜個底把顏色重新設置下不就行了麼,當然用黑科技 Category + MethodSwizzling(iOSAOP(面相切面編程)的一種實現方式) ,我忘了替換了哪個方法大概率是 viewWillAppear 這個方法,具體的代碼我就不寫了很簡單,效果也很好都替換成想要的顏色了。

不知道大家看出問題了沒,由於我是對 UIViewController 使用 Category 的,所有的 UIViewController 的背景色都被我改了,run 一個跑到輸入用戶名密碼界面彈出鍵盤發現界面沒了,變成一個純色頁面加一個鍵盤,是的我把類似的系統透明的UIViewController的顏色也改了。好吧我加個界面過濾(這裏一共過濾了5,6個頁面,當然只是我們發現的)。到這裏還沒結束。

IOS13有同事下了個GM版,說App有問題白屏了,因爲傳言IOS13改動不少,還以爲出Bug了,同事演示了下我就明白是上面的原因,因爲那是我寫的,一查果然蘋果不按套路出牌,換controller名稱了,好吧繼續在那個名單裏面加。

寫到這裏大家就明白了,我爲了偷懶付出了慘痛的代價:

1、這個名單不可控我不知道里面還要有誰,就靠發現問題來定位(當然也可以用別的方法來統一解決,但是我覺得還是不好,就不繼續誤導大家了,讓我們回到正確的道路上)。

2、如果現在App支持IOS9,不支持IOS8了,那些可以刪除不知道,這個列表只會越來越長,越來越讓人看不懂。

3、因爲是用 Category + MethodSwizzling 寫的查找這個錯誤要花很多時間。

4、如果某個界面背景色不是這個顏色了,在那裏設置顏色又要讓同事罵娘了。

5、這個方法在Swift裏面不能用,會有明顯的顏色轉換。

那麼應該怎麼做呢,我覺得應該用 Category 裏面加個類似 getBGColor 的方法返回一個顏色宏,然後在相應的界面調用這個獲取顏色的方法就很好。

1、很明顯這個顏色就是給 UIViewController 用的意思表達的很明確,位置也很對。

2、如果以後要改顏色就改這個返回就好了,也不用在顏色邏輯上糾纏不清。

請記住代碼是寫給人看的,不是給機器看的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章