iOS 迁移指南
本文档将引导您在项目中将 Compose Multiplatform 库升级至 1.7.0 及更高版本时需注意的 iOS 相关事项。
从 Compose Multiplatform 1.6.11 迁移至 1.7.0
移除 UIKitView 和 UIKitViewController 的 background 参数
已弃用的 UIKitView
和 UIKitViewController
API 包含 background
参数,而新版 API 已移除该参数。该参数因冗余性被删除:
如需为新实例设置交互视图背景,可通过
factory
参数实现如需支持背景动态更新,请将相关代码置于
update
lambda 中
触摸或手势行为可能发生变化
新版默认的触摸行为采用延迟机制判断触摸事件应传递给交互视图还是其 Compose 容器:用户需保持静止至少 150 毫秒后,交互视图才会接收触摸事件。
如需恢复旧版触摸处理逻辑,可尝试新的实验性 UIKitInteropProperties
构造函数。通过设置 interactionMode
参数为 UIKitInteropInteractionMode.NonCooperative
,可使 Compose 直接将触摸事件传递给交互视图。
该构造函数标记为实验性,因为我们最终计划通过单一布尔值控制交互视图的可操作性。当前通过 interactionMode
显式定义的行为未来可能会改为自动推导。
accessibilityEnabled 更名为 isNativeAccessibilityEnabled 且默认关闭
旧版 UIKitView
和 UIKitViewController
构造函数的 accessibilityEnabled
参数已迁移并重命名为 UIKitInteropProperties.isNativeAccessibilityEnabled
属性,且默认值改为 false
。
isNativeAccessibilityEnabled
属性会为合并的 Compose 子树启用原生无障碍解析功能。除非交互视图需要丰富无障碍能力(如网页视图),否则不建议启用该属性。
关于该属性及其默认值的详细说明,请参阅 UIKitInteropProperties
类的代码文档。
移除 onResize 参数
旧版 UIKitView
和 UIKitViewController
构造函数的 onResize
参数虽然能基于 rect
参数设置自定义框架,但不会影响 Compose 布局本身,导致使用不够直观。此外,该参数的默认实现需要正确处理交互视图的框架,并包含视图裁剪的具体实现细节。
替代方案:
如需响应交互视图框架变化:
可重写交互
UIView
的layoutSubviews
方法或重写交互
UIViewController
的viewDidLayoutSubviews
方法亦可在
Modifier
链中添加onGloballyPositioned
如需设置交互视图框架,请使用 Compose 修饰符:
size
、fillMaxSize
等
部分 onReset 使用模式失效
同时使用非空 onReset
lambda 与 remember { UIView() }
是不正确的实现方式。
参考以下代码:
当 UIKitView
进入组合时,只会调用 factory
或 onReset
其中之一。因此若 onReset
非空,记忆化的 view
可能与实际显示的视图不同:组合函数退出时可能遗留视图实例,该实例会在重置时被复用,而非通过 factory
创建新实例。
正确做法是不要在构造函数中指定 onReset
值。若需要根据组合上下文执行交互视图的回调,建议通过 update
或 onReset
将回调存储在视图内部。