iOS设计幕后:艾维以极简重塑人机关系
|
文章配图,仅供参考 去年双十一前夜,我蹲在望京那栋老楼的机房里改 Safari 的 scroll-behavior fallback——不是为 iOS,是为那个用安卓 9 的运营大姐,她手机刷不出首页轮播图,截图发到群里时还带了句“苹果都行你们这不行?”,底下三个人秒回“+1”,其实谁都没点开过她的截图。空调外机卡着壳,滋啦滋啦响了一整晚,我左手边凉透的黄焖鸡米饭盒盖没盖严,飘着一缕油星儿。我说艾维那套“极简重塑人机关系”站得住?站得住。但不是靠禅意留白、不是靠无界按钮,是靠优胜劣汰——字面意义的淘汰。你做不出来,就活该被切掉。去年四月我们推新版侧滑返回交互,UI 同步给了三版动效曲线,开发组拆成两拨人,一拨写 WebKit 内核兼容逻辑,一拨蹲在真机上测 touchstart 的 event.cancelable 属性到底在 iOS 16.4 哪个补丁里被偷偷改成了 false。老杨当时坐我斜后方,啃着一根蔫了的黄瓜,咬一口停两秒,咔嚓声特别准。他突然把黄瓜往桌上一磕:“你猜 Safari 现在认不认 passive: false?我昨天在 16.4.1 测了八遍。”我没理他。结果第二天晨会,PM 拿着 iPad Pro 连着 AirServer 投屏,划了三下——第三下没触发 popstate,他手指悬在半空,没缩回去,就那么顿着,像被钉住。会议室窗玻璃反光,照出他耳后一小块没刮干净的胡茬。 我原以为苹果是靠控制链路闭环来省事,结果发现人家是靠物理删减。他们连“用户教育”的成本都不想付:你要是看不懂 swipe to go back,那就别用。去年六月我们硬塞了个手势引导浮层进内嵌 WebView,iOS 上刚 touchstart 就被 WKWebView 自己吞掉了事件流,连 preventDefault 都没机会调。测试同学说“浮层闪了一下”,我看了录屏——确实闪了,十七帧,第十二帧有个微弱的 opacity 变化,然后没了。我把录屏发给 QA 老张,他回复“已复现”,再没下文。三天后我在食堂打饭,听见他跟新人讲:“别信文档,WebKit 里埋了四十多个 _shouldSuppressXXX 的私有 flag,有些连 header 都没暴露。”他夹起一块豆腐,豆腐尖上挂着半颗葱花,抖也没抖。 组件库撕逼那次更绝。A 组推 React,B 组推 Vue,最后产品拍板“两套并存”,理由是“技术债不能一刀切”。结果呢?iOS 客户端那边悄悄把 WebView 容器升级到了 WKWebView 1820,顺手禁了 document.write。我们写的 Vue mounted 钩子里那句 document.write('')——啪,整个内页白屏。不是报错,是静默失败。查日志发现 console 里干干净净,连 warning 都没有。只有老杨在 devtools 里翻 Network 标签页时,无意点开那个 base64 编码的 data:text/html,xxxxx 的资源地址,看见响应头里写着 X-WebKit-Disable-Document-Write: true。他截图甩到群聊,没配字。过了十七分钟,有人回:“原来真有这个 header?” 雨是从凌晨两点开始下的。不是那种噼里啪啦的暴雨,是北京秋末那种阴着脸往下洇的冷雨,窗缝里钻进来一股铁锈味。我那时正调一个 iOS 17.1 的滚动粘性 bug——nav bar 应该 sticky 在 viewport top,但在某些高刷新率机型上,scroll 事件和 requestAnimationFrame 的 timing gap 大到能塞进半个动画帧。我试了 intersectionObserver、resizeObserver、甚至用 getBoundingClientRect 做 polling,全挂。最后发现解法居然是加个 will-change: transform。不是加在 navbar 上,是加在它父容器的伪元素里。加完那天早上,我看着 DevTools 里那个绿色小图标亮起来,忽然觉得特别荒谬:我们这代人写 Web,最后靠的不是规范,不是 API,是猜 iOS 内核某次 commit 里某个开发者随手加的一行启发式判断。 前几天见了苹果那个前人机交互总监,现在创业做 AR 输入法的。他喝咖啡不放糖,杯子沿上一圈浅褐色印子。聊到“极简”时他笑了:“你们老说艾维砍东西狠,其实他砍的是‘解释权’——UI 不解释为什么这么排布,系统不解释为什么这么调度进程,人也不必解释为什么直觉就该这么操作。”他说完低头看表,手腕翻过来那一瞬,表带底下露出一截蓝紫色的皮肤淤痕,应该是手表压的。我没问。 所以现在每次写 CSS @supports (scrollbar-gutter: stable),我都先 check 一遍是否在 WKWebView context 下,再 check 一次 UA 字符串里有没有 OS/17_1 和 AppleWebKit/618.1.15 的组合。这事没法自动化,得手动 grep。上周五下午三点零七分,我 grep 出三个疑似漏网的页面,其中一个叫 report_detail.html,文件创建时间是三年前,作者叫“zhangsan_old”,没人知道是谁。我把它标为“观察项”,没删,也没修——等哪天它真崩了,再说。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

