大廠高手出品:這2個(gè)蘋果控件你肯定分不清!
hello,沒想到這么快年就要過完了,今天來聊一聊蘋果規(guī)范里兩個(gè)令人迷惑的東西,action sheet 和 activity view。
兩個(gè)組件都屬于常見組件,其中 action sheet 出現(xiàn)得更早。之后出現(xiàn)的 activity view 在布局上違背了 action sheet 的部分設(shè)計(jì)理念和規(guī)則,而蘋果規(guī)范又對(duì)此語焉不詳,因此有些同學(xué)對(duì)如何設(shè)計(jì)一個(gè)底部浮層(或者面板)產(chǎn)生了很多疑問。因此今天我們就從它的發(fā)展史出發(fā)來講講他們的差異,以及應(yīng)該如何看待“規(guī)范”??梢哉f規(guī)范的演變就是不斷吃書的過程。
Action sheet 的演變歷史
action sheet 是設(shè)計(jì)規(guī)范中提供的最早的一批標(biāo)準(zhǔn)組件,和其他組件相比,蘋果對(duì) action sheet 的定義和迭代的更新其實(shí)不算多,它的樣式也沒有特別大的變化。
在 2008 年 iPhone OS 2 時(shí)代的規(guī)范中,將 action sheet 和警告彈窗(alert)、模態(tài)視圖(modal view)都?xì)w類為視圖的不同類型。實(shí)際上“視圖 view”這個(gè)說法一直都非常模糊,我猜測這個(gè)說法來源于 MVC 設(shè)計(jì)模式,是開發(fā)兼任設(shè)計(jì)時(shí)代遺留下來的名詞?,F(xiàn)在蘋果將 view 解釋為“應(yīng)用程序用戶界面的基本構(gòu)件”,我個(gè)人把 view 按照原子系統(tǒng)理解為“頁面模板”。
從創(chuàng)立之初,action sheet 有兩種用途:
- 收納針對(duì)用戶當(dāng)前任務(wù)的多種操作。這樣就不用在頁面上把這些操作全部展示出來。
- 進(jìn)行風(fēng)險(xiǎn)操作之前,可以用 action sheet 來做再確認(rèn)。
根據(jù)這兩個(gè)用途,2008 年對(duì) action sheet 的說明和規(guī)則總共有以下幾點(diǎn):
- 一定要有底部取消按鈕,除了取消按鈕之外至少提供 2 個(gè)操作按鈕
- 點(diǎn)擊操作按鈕之后,action sheet 將會(huì)消失
- Action sheet 上不寫說明文案,因?yàn)樗潜挥脩糁鲃?dòng)點(diǎn)擊彈出的頁面,用戶可以根據(jù)當(dāng)前任務(wù)和按鈕文案推斷出這個(gè)浮層的作用。
根據(jù)以上幾點(diǎn)我們可以看出 2008 年前后移動(dòng)端的業(yè)態(tài)還是比較簡單的。第 2 條規(guī)則讓 action sheet 是一個(gè)只能承載操作按鈕的臨時(shí)不穩(wěn)定容器,它杜絕了使用 action sheet 來做多級(jí)復(fù)雜任務(wù)的可能性,而且也并沒有提到任何和擴(kuò)展性相關(guān)的解決方案。
在 2011 年時(shí),蘋果對(duì) action sheet 進(jìn)一步作出了說明:
- 解釋了將取消按鈕放在頁面底部的作用:鼓勵(lì)用戶看完所有選項(xiàng)后再做出選擇。
- 強(qiáng)調(diào)風(fēng)險(xiǎn)/破壞性操作要用紅色按鈕。
- 不允許縱向滑動(dòng),因?yàn)椋哼^長的面板可能會(huì)導(dǎo)致用戶花費(fèi)過長的時(shí)間來思考每個(gè)選項(xiàng);縱向滑動(dòng)可能導(dǎo)致誤觸。
自此,action sheet 的幾個(gè)比較重要的規(guī)范就都成型了。盡管在 2014 年取消了“點(diǎn)擊操作按鈕后 action sheet 會(huì)消失”和“action sheet 上不寫說明文案”的說明,讓它的擴(kuò)展性稍微強(qiáng)了一些,但是從蘋果對(duì)其縱向滑動(dòng)的限制、對(duì)「取消」按鈕的強(qiáng)調(diào)上,可以看出 action sheet 仍然是暫時(shí)性的,傾向于不讓用戶停留太久、完成較為復(fù)雜的任務(wù)。
在 iOS14 之后,蘋果提供了新的組件 menu 來收納操作,因此進(jìn)一步限制了 action sheet 的使用場景。iOS14 版規(guī)范將 action sheet 歸納到 alert 警告彈窗中,“只有破壞性操作可以使用 action sheet,否則都應(yīng)該使用 menu”。但在后續(xù)版本迭代中又更改了說法,現(xiàn)在 action sheet 基本上被用于承載與「用戶發(fā)起的操作」直接相關(guān)的功能,比如刪除/離開前的再確認(rèn),而不再承載“收納主頁面放不下的次級(jí)操作”的功能。
Activity view 的演變歷史
Activity view 是為了“分享”這個(gè)功能定制的。目前為止它的使用場景基本限制在分享上,很少見其他場景使用這樣的版式,但我個(gè)人認(rèn)為它在未來有擴(kuò)展場景的潛質(zhì)。
蘋果一直有“分享”功能,這個(gè)功能最開始使用 action sheet 實(shí)現(xiàn),然后在 iOS6 時(shí)期由 action sheet 改版了圖標(biāo)樣式(但是很可惜沒有說為什么這樣改)。iOS6 時(shí)代蘋果并沒有成熟的 App 間分享功能,當(dāng)時(shí)只支持 facebook、twitter、微博等幾個(gè)有限的 App 分享,因此在頁面設(shè)計(jì)上面也沒有考慮擴(kuò)展性。到了 iOS7 后,蘋果進(jìn)行了兩個(gè)重要的功能迭代:
- 允許 App store 中海量的第三方 App 接入“分享”功能。這導(dǎo)致分享頁面上的操作數(shù)量不確定
- 上線了 airdrop 功能,并且可能由于早期對(duì)這個(gè)功能的推廣,iOS7 允許圖片在當(dāng)前頁面內(nèi)被多次分享給不同的人,因此只能支持單次操作的 action sheet 無法再滿足訴求了。
于是基于這兩個(gè)重要的功能變化,才產(chǎn)生了我們熟悉的這個(gè)橫滑版的 Activity view。
activity view 的設(shè)計(jì)究竟想解決什么樣的問題我們不得而知,因?yàn)樗囊?guī)范中說的東西也比較語焉不詳。只能說從它最終呈現(xiàn)的效果來看,和以往的設(shè)計(jì)有這些改變:
Activity view 首次在 iOS7 的規(guī)范中登場時(shí),是一個(gè)“控制器”controller,而非一個(gè)完整頁面,這讓它可以添加“取消”按鈕成為一個(gè)類似 action sheet 的模態(tài),也可以作為頁面上的一個(gè)元素,搭配頁面左上角的“取消”按鈕。
我個(gè)人認(rèn)為這么設(shè)計(jì)其實(shí)挺冗余,頁面允許橫滑后,“取消”按鈕非要放在頁面底部的理由就根本不成立了,因?yàn)橛脩舻囊暰€并不一定是從上到下看完的,而有可能是從左到右,根本沒往下看。沒有必要為了遵守 action sheet 的規(guī)范而制作兩套功能完全一樣的版式。
- activity view 采用了大圖標(biāo)而非縱向文字列表的樣式。從迭代趨勢來看,合理猜測是因?yàn)榻尤氲谌狡脚_(tái)后圖片 icon 的識(shí)別效率比純文字更高。
- Activity view 允許橫滑。這也違背了 action sheet“面板不允許縱向滑動(dòng)”的理由。很明顯這樣做是因?yàn)榻尤氲谌狡脚_(tái) app 數(shù)量不確定,只能通過橫滑來保證一些系統(tǒng)操作(復(fù)制/投屏等)能夠在第一屏露出。
當(dāng)然 iOS7 的 activity view 還有些其他的問題,
基于這些問題,activity view 再次改版,也就是現(xiàn)在 iOS13 的樣式。
自此,activity view 完全脫離了早期 action sheet 規(guī)范的影響,它允許縱向滑動(dòng)、不再添加底部取消按鈕、并且支持用戶在本頁面進(jìn)行多層級(jí)的相對(duì)較為復(fù)雜的操作(比如點(diǎn)擊 airdrop 彈出二級(jí)彈窗,但不關(guān)閉此 activity view)。
總而言之,根據(jù)現(xiàn)行的蘋果規(guī)范:
- action sheet 更加聚焦、迅速,它不支持多層級(jí)操作,更多被用于再確認(rèn)場景。
- Activity view 暫時(shí)被用于分享場景,它更加具有擴(kuò)展性,且支持多層級(jí)操作。
「寫在最后」
上面講了這么多演變歷史相關(guān)的東西,其實(shí)我們也可以看出來像蘋果這樣的操作系統(tǒng)迭代是很謹(jǐn)慎也很慢的。從 action sheet 到 activity view,蘋果花了近 10 年時(shí)間。而我們?nèi)粘W鲈O(shè)計(jì)迭代速度和反應(yīng)時(shí)間肯定是要比蘋果快的。因此,做設(shè)計(jì)不要單純照搬操作系統(tǒng)規(guī)范,而要去思考哪些東西比較貼合場景。