C3.14.2Back stack versus up navigation设计研究

返回栈语义与「上一级」语义不同

别名: 返回栈 · up vs back · 层级返回

概念解释

返回手势弹出的是访问历史栈上的上一帧:你从哪来,就回哪去,哪怕那一帧和当前页在信息架构里不是父子。导航栏上的“上一级”(up)则走向结构上的父级,不管你刚从搜索、通知还是深链跳进来。两者都叫“回去”,栈和树不是同一条路。手势若只实现其中一种、界面却暗示另一种,人会回到一个他们不认得的地方。

机制

栈忠于时间:A → 搜索结果 → 详情,返回详情应回到搜索结果。树忠于结构:详情的父级可能是某分类首页,从通知点进来的人按 up 会落到他们从未路过的分类。Android 长期把系统返回键绑在栈上,把工具栏左箭头绑在 up 上;iOS 的侧滑返回通常也走控制器栈,但栈可以被深链重置。Web 的 history.back 是栈,站点面包屑是树。手势因为不可见,用户无法在提交前分辨自己走的是哪一种,只能靠完成后的页面来事后学习。预测性返回若预览的是栈顶,却在松手时改走父级,预览本身在撒谎。

怎么研究

设计两条进路到达同一详情:从父级列表点入,从全局搜索或通知点入。请人用返回手势离开。记录落点是搜索/通知来源还是父级列表,以及口头预期。把工具栏 up 与手势 back 对照。深链冷启动(应用不在后台)要单列,因为栈可能只有一帧,返回会退出应用而不是回父级。

边界

线性向导没有树,栈和 up 重合。单页应用若把所有状态推入一个假栈,返回会在页内打转,树也走不通。有的产品故意让手势回父级,以避免回到已经过期的搜索会话,这是产品策略,必须在预览里写清楚,不能暗中改栈。

怎么落地

  • 手势返回走历史栈;需要“到父级”时用可见的 up 或面包屑,不要让同一条侧滑有时弹栈有时跳树。
  • 深链进入且栈底就是当前页时,返回应退出到系统桌面或上一个应用,不要虚构一个用户没来过的父级。
  • 从通知打开详情再侧滑。应回到通知前的上下文(或退出应用),而不是跳到信息架构里的父分类。若预览卡片画的是父分类,预览与栈不一致。

延伸

  • 同组C3.14.1 返回手势的方向与平台惯例绑定 · C3.14.3 返回手势必须有可见的备用入口
  • 相邻C3.13 边缘滑入手势 · C3.05 轻扫
  • 站内检索back stack · up navigation · information architecture

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C3.14.2