T3 Code 非官方中文翻译不是官方产品,也不是 T3 Tools 官方文档。源提交 d2c25950b4d9英文原文GitHub 源文件
Skip to content

移动端导航 ​

主页和对话线程(thread)路由共用根原生栈,这样 UIKit 就能在同一个导航控制器里为顶栏做动画。iPad 侧边栏有自己的栈。如果把主页和对话线程拆到不同的控制器,这种连续转场就会丢失。栈如何变成列、sheet 和窗格,见移动端布局。

选择与钻入 ​

打开一个页面有两种意图,每种意图对应一个操作:

  • 选择把一条对话线程或一个拉取请求(pull request)显示为工作区里唯一的页面,就像点列表中的一行那样。所有会执行选择的地方(列表行、命令面板、撰写、通知、深链)都使用 selectWorkspaceDetail,由根栈的路由器处理。得到的栈在手机、收起的分栏和展开的分栏上都相同。不同的只有路由键:已经显示着的页面会保留自己的键,因此详情列就地更新,而不是再压入一页。
  • 钻入在当前页面之上再打开一页,这样返回才能回去,使用的是 StackActions.push。

用 navigate 前往 Thread 或 PullRequest 会被 lint 拒绝,因为这样做会随着当时栈顶的内容,有时压入、有时就地更新。绝不要从转场事件去推断该选哪一种:UIKit 在分栏视图里也会报告侧边栏那一列的出现。路由器所使用的唯一原生信号,是卡片上的原生返回正在弹出。工作区导航器会报告这个信号,而一次选择绝不会复用那张卡片。

在列表旁边,各个设置页共用同一个原生屏幕,只切换其中的内容,就像系统的「设置」应用。如果一页一条路由,就会把这一列弹出再压入,并卸载它的顶栏配置,导航栏也会因此被隐藏。

UIKit 约束 ​

react-native-screens 分支保留了那些在改动原生顶栏时很容易被弄坏的行为:

  • 品牌应当放在 headerTitle 里。在 iOS 26.5 上,UIKit 会把一个没有背景的前导工具栏项的矩形,变形为下一屏的玻璃返回按钮,即便这些项的标识并不相同。
  • UIKit 的滚动边缘淡出无法识别 Fabric 文本视图。一个空的原生标签负责提供自定义标题的几何信息。去掉这个看上去没有用处的视图,淡出效果就会改变。
  • 前导、尾随和居中这三组项需要各自独立的缓存。一个按钮只能属于一个组;把一个并没有变化的组重新建一遍,可能把它的按钮从 UIKit 仍在做动画的那个组里拽出来。缓存的归属也包括顶栏配置,而顶栏配置的事件发射器会在重新挂载时换成新的。
  • 横向 ScrollView 在处于前缘时,必须把全屏返回手势让出去。上游让每一个横向 ScrollView 都优先于该手势,因此在代码块或表格上向后滑,只能让内容回弹。
  • UIKit 把顶栏的滚动边缘模糊画在滚动视图里面,而工作区的列会把内容从 iPhone Duo 的竖条旁边垫开。注册顶栏所用的滚动视图时,只能经由 NativeScrollViewMarker 或 NativeScrollView:它们的原生包装会把滚动视图加宽到这根竖条下面,于是模糊能够铺到竖条,内容则仍留在安全区内。在左侧,它是通过边界原点把 React Native 的内容视图移回去的,从不用内容偏移:React Native 会在自己的布局过程里改写偏移,那样做曾经让对话线程错位到竖条下面。Lint 会拒绝在任何其他地方导入 ScrollViewMarker。

这个分支增加了需要代码生成和新二进制的原生顶栏属性。参见分支构建说明。

原生媒体呈现 ​

iOS 把全屏视频委托给 AVKit,把图像和文档委托给 Quick Look。每个框架都自己拥有控件和转场。如果再单独做一套 UIKit 缩放转场,就会让 AVKit 的原生关闭操作无法退出全屏,也会干扰 Quick Look 交互式地回到它的缩略图。AVKit 的入口选择器带有防护,回退方式是标准的模态呈现。

缩略图注册为转场锚点和分享面板锚点保存弱视图引用。它并不拥有这份预览;原生呈现还开着的时候,来源那一行也可以消失。标识必须把同时可见的附件区分开。原生 promise 要等关闭完成之后才结束,这样调用方会把本地文件租约一直留到预览或分享流程结束。

在 UIKit 做完当前转场之前,把一次关闭请求视为尚未完成。如果在呈现过程中,或一次交互式关闭还在落定的时候,再发起另一次关闭,控制器就可能被搁住。视频清理只有在先前的音频配置仍然与这份预览的配置相符时,才会把它恢复回来。它不得停用共享音频会话,因为该会话可能属于另一个播放器或录音器。

在预览的整个生命周期里,视频播放一直持有第一个已签名的资源 URL。如果响应式地去跟随之后的凭据刷新,播放就会重新开始。Quick Look 会把原始字节复制到它自己的临时目录里,这样预览和分享就改不到草稿或工作区里的文件。

非官方译文 · 源提交 d2c25950b4d9 · 不代表 T3 Tools