底部標(biāo)簽選擇欄,頂部導(dǎo)航欄用系統(tǒng)的剖淀,還是自定義?在實(shí)踐過程中纤房,經(jīng)常有這樣的糾結(jié)纵隔。
原因分析
- 標(biāo)簽欄和導(dǎo)航欄跟一般視圖不一樣,他們屬于兩個容器控制器的一部分炮姨,是這兩個容器控制器的可見部分捌刮。
- 標(biāo)簽欄和導(dǎo)航欄是全局的,整個應(yīng)用就一個舒岸,在某處的改動很可能在其他場景出現(xiàn)意料之外的結(jié)果
- 標(biāo)簽欄和導(dǎo)航欄處于最頂層绅作,跟其他視圖不在一個層面
- 標(biāo)簽欄和導(dǎo)航欄尺寸,布局等往往有特殊的約定蛾派。比如系統(tǒng)兼容俄认,等比例放大等概念就不大合適用來描述他們
- 有些時(shí)候,往往出現(xiàn)在開發(fā)者看來比較奇葩的需求碍脏。比如標(biāo)簽欄的圖標(biāo)要動梭依,內(nèi)容區(qū)域的視圖延伸到導(dǎo)航欄。導(dǎo)航欄隨著表格的滑動淡入淡出的動效典尾。等等不一而足役拴。專業(yè)而負(fù)責(zé)的回答是讓提這些意見的人去看看蘋果的界面設(shè)計(jì)指導(dǎo)
系統(tǒng)的
- 目前用系統(tǒng)的還是占大多數(shù),蘋果提供的系統(tǒng)組件已經(jīng)足夠優(yōu)秀
- 全局的钾埂,樣式只要設(shè)置一次就好了
- 標(biāo)簽欄只要提供黑白的icon就可以了河闰,自帶漸變效果
- 有些API的設(shè)計(jì)比較獨(dú)特,和預(yù)期相差較大褥紫,需要針對性多嘗試
- 已經(jīng)能夠覆蓋日常絕大部分的需求
- 限制還是比較明顯的姜性,那些“特殊的奇葩的”需求很難滿足
自定義的
- 對那些“特殊的奇葩的”需求能靈活應(yīng)對
- API可以取個自己看著舒服的名字
- 能開發(fā)者能力相關(guān),給出的API在其他開發(fā)者開來不一定比系統(tǒng)的好用
- 不通用髓考,成果在其他地方用不上
- 用視圖模擬的話部念,是局部的,每個頁面都要搞一遍氨菇,比較繁瑣
- 繼承系統(tǒng)類自定義的話儡炼,受限制明顯,對那些“特殊的奇葩的”需求就顯得力不從心
- 有些系統(tǒng)的功能就比較難實(shí)現(xiàn)查蓉,比如左滑后退乌询、中間的動效等等
選擇建議
- 盡量用系統(tǒng)的標(biāo)簽欄和導(dǎo)航欄,功能已經(jīng)非常強(qiáng)大豌研,也是目前的主流選擇
- 必要的時(shí)候可以考慮集成系統(tǒng)的類進(jìn)行一些自定義妹田,不過只推薦一級繼承唬党。
- 對那些“特殊的奇葩的”需求,就隱藏系統(tǒng)的標(biāo)簽欄和導(dǎo)航欄鬼佣,就當(dāng)做一個普通的視圖來做驶拱,一般這種頁面是高度自定義的,不會太多
- 隱藏或者顯示系統(tǒng)的標(biāo)簽欄或者導(dǎo)航欄沮趣,會影響其他的頁面屯烦。這里有兩種處理方式:一種是增加一個屬性記錄狀態(tài),離開頁面之后恢復(fù)房铭。另一種是讓受影響的頁面自行設(shè)置。這兩種方法都可以温眉,只要大家約定好就行缸匪。