我一直在研究如何爲iOS應用程序創建配色方案。iOS應用程序的配色方案 - UIView和UIAppearance - 設置背景顏色
從故事板開始併爲每個組件手動設置背景顏色後,我很快意識到,雖然對於玩具應用程序來說,沒有問題,但對於任何更復雜的事情來說,這會既枯燥又耗時 - 特別是如果你想在未來再次改變所有的顏色。
這導致我找到UIAppearance協議,我想,作爲一個起點,如何只是在做這樣的事情:
[[UIView appearance] setBackgroundColor:[UIColor orangeColor]];
我在Xcode 6試驗和使用主從應用程序模板(目標-C)。結果並非我所期望的;我預計該應用看起來與之前一樣,但具有橙色背景。我實際上得到的是整個應用程序顯示爲橙色的單個全屏矩形,無法查看UI的實際元素。它看起來像前景和背景顏色都設置爲橙色,沒有區別(我會張貼我看到的圖像,但我目前沒有足夠的聲譽)。我也嘗試使用setTintColor,但這似乎影響的唯一UI元素是UITableView的「編輯」並添加其文本設置爲橙色的「+」按鈕。
我能夠通過設置以下以獲得基本上由「預期」的結果(在下面的代碼段DetailViewUIAppearanceTest是的UIView的未修改子類,我設置爲用於詳細視圖):
[[UITableView appearance] setBackgroundColor:[UIColor orangeColor]];
[[UITableViewCell appearance] setBackgroundColor:[UIColor orangeColor]];
[[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]];
[[DetailViewUIAppearanceTest appearance] setBackgroundColor:[UIColor orangeColor]];
[[UILabel appearance] setBackgroundColor:[UIColor orangeColor]];
我知道這並沒有太多的代碼,它允許對外觀進行更細緻的控制(只有堅實的橙色可能不是最好的外觀!),但它留下的東西我不明白,如果我不'不明白,那麼可能有未知的陷阱,所以我的問題是:
- 爲什麼不簡單地設置UIView的背景顏色實際上是爲所有視圖設置背景顏色(而不是使前景和背景同一)?
- 對於UINavigationBar,setBackgroundColor:似乎沒有效果,只有setBarTintColor:具有預期的結果。這種行爲似乎並不一致;有誰知道這是爲什麼?
- Bonus問題:是否有任何方法可以設置全班級的UITableViewCell的背景顏色?我遇到的唯一方法是實例屬性'selectedBackgroundView',一個選項是將其子類化並在指定的初始化程序中設置給定的顏色,但有沒有更好的方法?
正如你可能從這個問題可以告訴我,我是新的iOS開發;我的背景是服務器端C++,而且我正在與Objective-C合作,因爲它離我的舒適區更近一點,Swift似乎也是目前的移動目標。
謝謝克里斯,你的回答幫助我解決了一些其他我着色過的實際問題。你指出能夠基於層次結構進行着色的部分特別有用,因爲當我在研究嵌入式UITableView時,無法一直獲得正確的顏色。 我不太確定的一件事仍然是背景顏色的UIView設置。我得到了幾乎所有從UIView繼承而來的設置,並且爲所有設置了背景顏色,但是我不明白爲什麼會隱藏以前可見的任何「前景」顏色。 – DragonTheHorse
太棒了!樂意效勞。至於'UIView'問題。如果我正確閱讀,我認爲發生的事情又是所有的意見都將'backgroundColor'設置爲橙色。爲了澄清,我的意思是即使'UILabel'繼承自'UIView' - 所以即使他們的'backgroundColor'也會變成橙色。但是,如果你說即使'textColor'變成橙色,那也是奇怪的。我不確定爲什麼會這樣。也許如果你用前景色詳細說明你的意思,我可以幫助更多。 – Kris
外觀就像'textColor'這樣的東西也被設置爲橙色,所以即使畫布上的標籤也是不可見的,因爲它們與背景顏色相同(並且在故事板中textColor是黑色的) 。這可能不是實際發生的事情,它只是看起來發生了什麼。也許在默認應用程序模板的前景中有一個通常是透明的全屏視圖 - 如果這樣,我當然可以理解,將其背景設置爲純橙將會蝕掉應用程序中的其他所有內容 – DragonTheHorse