资讯动态

OpenHarmony下React Native搜索图标定制:三种方案与避坑指南

发布时间:2026/10/15 18:22:27 来源:尧图企业网站定制
最近在做一个跨端业务时接了一个有点琐碎但很典型的需求项目里有一套基于 React Native 的主应用需要同时覆盖 Android、iOS 和 OpenHarmony 三个平台。UI 走查了几轮之后发现问题集中在很小的一个点上——搜索栏里的那个搜索图标在 OpenHarmony 上长得和设计稿差了不少。默认放大镜偏大、颜色发灰点击热区也不对。于是就有了这篇文章要聊的这件事在 OpenHarmony 上用 React Native 开发时如何把一个 SearchBar 里的搜索图标定制成符合自己 UI 规范的样子。这篇内容不聊那种“把整个搜索页重写一遍”的大工程只围绕“搜索图标定制”这一个细节展开。我会讲清楚图标的来源、三种可落地的定制方案、过程中踩过的坑以及最后怎么把方案沉淀成团队可维护的公共组件。适合正在做 OpenHarmony 跨端适配的 RN 开发同学或者刚接触 OpenHarmony 生态、想搞清楚“RN 组件在鸿蒙里到底怎么渲染”的移动端工程师。1. 先搞清楚本质搜索图标定制为什么值得单独拿出来讲1.1 搜索入口是“组件级品牌触点”细节决定体验下限搜索栏是一个 App 里几乎每天都会被大量用户使用的入口。它表面上只是个输入框加一个放大镜但在真实产品里搜索图标的品牌属性很强有的产品用圆头放大镜有的用直角钩子有的在产品里直接放一个品牌符号。图标风格变化直接影响用户对产品的识别。我遇到的这个案例是一款商城应用。设计稿里搜索栏左侧的图标是一枚自定义的“品牌搜索符号”对尺寸、颜色、描边粗细都有明确要求。而 React Native 生态里常见的 SearchBar 组件默认用的是通用放大镜图标。这个默认图标在 Android 和 iOS 上可以勉强接受但在 OpenHarmony 上因为适配层的默认样式覆盖颜色和渲染尺寸都和设计稿偏差明显导致搜索页看起来比其他页面“低半级”。这类问题看起来很小但一旦产品进入走查阶段就会变成阻塞项设计不允许发版开发又觉得“不就是个图标吗”。恰恰是这种“小问题”最容易暴露出跨端 UI 体系里的隐性问题比如资源来源不统一、默认样式覆盖、像素单位换算错误。值得单独写是因为它能延伸出很多通用排查方法。1.2 “在 OpenHarmony 上用 React Native”到底是个什么状态先说清楚背景。React Native 本身是为 Android 和 iOS 设计的框架OpenHarmony 并不是它默认支持的目标平台。要让 RN 代码跑在 OpenHarmony 上需要依赖社区或厂商维护的适配层——说白了就是把 RN 的 JS 渲染请求转换成 OpenHarmony 的 ArkUI 原生组件。这意味着两件事业务逻辑、状态管理、网络层这些纯 JS 代码可以跨三端复用这也是团队选择 RN 的根本原因。UI 层则没有那么“无缝”。RN 的组件在 OpenHarmony 上最终会映射到 ArkUI 的对应组件而 ArkUI 的默认样式、布局规则、资源加载方式和 Android 不完全一致。搜索图标这种小元素正好处于 UI 层的最敏感地带。开发的时候如果只依赖前端思维觉得“给 Image 传个 src 就万事大吉”往往会在 OpenHarmony 上翻车。因为 OpenHarmony 的资源加载路径、图片缓存策略、以及适配层对 Image 组件默认属性的处理都会影响最终渲染结果。1.3 定制前先做需求拆解能少走一半弯路我在处理这个需求时没有直接打开代码改图标而是先做了一次拆分。一个看似简单的“搜索图标定制”实际上包含五个子项第一个是外观。图标的图形、线条粗细、颜色必须以设计稿为准。第二个是尺寸。图标显示大小是多少这个需要精确到像素级的换算。第三个是点击热区。图标虽然通常点击没有独立事件但如果整个搜索框被点击时需要考虑触控范围。第四个是状态。搜索框有没有聚焦和非聚焦状态图标颜色是否跟随状态变化。第五是加载方式。图标是打包在 App 内的静态资源还是需要从服务端动态下发。把这五个子项列出来之后再去选技术方案思路就清晰很多。比如我们的需求是品牌图标、固定颜色那么静态资源就够用没有必要走字体图标或网络图片。反过来如果图标颜色需要跟随主题动态变化那静态 PNG 就不合适应该用支持 tint 颜色的组件或字体图标。在这个需求里我最终确定的目标是默认状态和聚焦状态下都能显示品牌搜索图标尺寸精确对应设计稿点击热区不小于 44×44三端表现一致。目标明确了后面所有技术决策都能围绕这几条展开。2. 摸清 SearchBar 图标在 OpenHarmony 上的“来路”2.1 RN 组件到 ArkUI 原生渲染的链路和定制有什么关系很多人定制图标不成功是因为不知道图标到底是从哪一层渲染出来的。在 OpenHarmony 的适配链路里React Native 的组件并不会直接变成 OpenHarmony 的界面元素而是要经过一层转换。大致链路是这样的JS 代码里的SearchBar组件会被适配层识别转换成对应的 ArkUI 组件同时JS 传入的属性比如图标 URL、样式会被序列化通过桥接层传给原生侧原生侧拿到属性后再调用 ArkUI 的 Image 或其他原生控件去渲染。这条链路对定制的影响非常大。比如你在 JS 里给图标传了一个网络地址适配层在 OpenHarmony 上加载网络图片时可能会受安全域名配置或缓存策略影响。再比如你传了一个本地 require 的资源路径RN 在打包时会把资源文件放到特定目录但 OpenHarmony 适配层读不读这个目录取决于适配层对资源路径的解析是否完整。所以第一步不是改代码而是定位当前显示的默认放大镜到底是组件库里的内置 Image 渲染的还是 ArkUI 侧默认给的。定位了来源才知道该在哪一层动手。2.2 默认图标最常见的两个“窝点”用社区组件库或内部封装库时SearchBar 的默认图标一般藏在两个地方。第一个是 JS 层组件库内置的 Icon 组件。很多 RN 组件库会自带一套图标SearchBar 内部默认渲染Icon namesearch /。这种情况下只要组件库暴露了图标替换属性定制就很简单。第二个是原生适配层或 ArkUI 侧的资源。如果 SearchBar 是原生封装的或者在 OpenHarmony 适配层里有独立的实现那么默认图标可能是一个原生资源文件存放在 OpenHarmony 工程的resources目录下。这个时修单靠 JS 层传属性是改不掉的必须去原生侧替换资源或修改映射逻辑。我遇到的情况正好是第二种。组件库在 Android 和 iOS 上用的是 JS 内置图标但在 OpenHarmony 上适配层由于缺少对某个 Icon 组件的完整支持兜底渲染了一个 ArkUI 默认图标。这就导致了同一个组件在不同平台表现不同光看前端代码完全看不出原因。2.3 快速定位图标来源的实操方法定位图标来源我有一个屡试不爽的土办法临时替换。具体操作是先在 JS 层给 SearchBar 传一个自定义图标比如一个纯红色的小方块图片。如果页面上立刻变成了红色方块说明图标是 JS 层控制的后续只需要处理样式和资源。如果页面纹丝不动还是那个默认放大镜说明图标被原生层“锁住”了JS 传参根本传不进去。还有一种情况很迷惑传了自定义图标后页面上出现了新图标但默认图标并没有完全消失而是叠加在一起。这通常意味着 SearchBar 结构里有多个图标渲染节点一个来自组件默认一个来自你的覆盖属性需要进一步查看组件层级。定位完来源以后还要记得查看调试菜单里的组件树找到图标对应的原生节点名。因为 ArkUI 侧渲染出来的节点在调试器里往往能看到控件的类型名称比如Image或ArkTSSearchBar这会直接告诉你它究竟是哪个层的组件。我就是靠这个方式确认了默认图标来自原生侧的实现才转向了接下来的资源替换方案。3. 搜索图标定制的三种可用方案与完整代码3.1 方案一直接用 SearchBar 属性传入自定义图标最快看到效果如果你的 SearchBar 组件支持图标定制属性那这是最直接的方案。社区里常见的 SearchBar 一般支持传入searchIcon之类的属性。不过我在 OpenHarmony 适配过程中发现这个属性不一定在所有适配版本里都能生效。所以采用这个方案前还是先做一遍“临时替换验证”确认属性真的能穿透到原生层。代码层面大致是这样import React from react; import { Image, StyleSheet } from react-native; import { SearchBar } from your-team/ui; const BrandSearchIcon () ( Image source{require(./assets/brand-search.png)} style{styles.icon} fadeDuration{0} / ); export const HomeSearchBar () { return ( SearchBar placeholder输入关键词 searchIcon{BrandSearchIcon /} containerStyle{styles.container} / ); }; const styles StyleSheet.create({ icon: { width: 20, height: 20, resizeMode: contain, }, container: { backgroundColor: #F2F3F5, }, });这个方案的优点是改动量最小不碰原生代码只需要在 JS 层处理资源路径和样式。缺点也很明显它高度依赖组件库是否兼容 OpenHarmony 适配层。如果你的组件库在 OHOS 上恰好没有实现这个属性代码写了也白写。我实测中还有一种情况就是属性传进去后图标可以渲染但style里的颜色和尺寸不生效因为原生层有自己的默认样式优先级。所以这个方案适合“组件库本身对 OpenHarmony 适配较完整”的场景。用之前一定要在 OHOS 真机或模拟器上快速验证属性生效情况再决定是否要投入更多精力。3.2 方案二在 OpenHarmony 资源目录里替换默认图标不碰 JS如果方案一验证失败基本就要去原生侧找问题了。前面说过默认图标可能存放在 OpenHarmony 工程的resources目录下。这时候可以考虑直接在资源目录里替换同名图标文件。OpenHarmony 应用的资源目录结构大致是entry/src/main/resources/ ├── base │ ├── element │ │ └── string.json │ ├── media │ │ ├── icon_placeholder.png │ │ └── search.png │ └── profile │ └── main_pages.json如果你能在media目录下找到一个名字类似search.png或ic_search.png的默认图标文件那就可以直接把设计稿切图替换进去。替换后重新编译图标大概率会全局生效。但这里有两个关键点需要额外注意。第一资源文件名要严格匹配。原生代码里写死了资源名如果你新建一个不同名字的图标文件它不会自动被引用。所以操作方法是“用新文件覆盖旧文件的名字和路径”而不是新增文件。第二图片的像素尺寸要按 OpenHarmony 的密度要求来。OpenHarmony 的vp单位和 Android 的dp概念类似一个 20vp 的图标在高分屏上需要对应更高分辨率的切图否则显示会发虚。这个方案的优点是效果最彻底因为直接改的是原生底层默认资源所有使用该资源的组件都会同步变化。缺点是维护性不佳资源文件放在原生工程里JS 团队改起来不方便而且如果以后想“按需定制”一种页面用品牌图标、另一种页面用默认图标这个方案就很难满足了。它更适合那种“全局统一替换”的场景。3.3 方案三自己封装一个跨端通用的 SearchBar一劳永逸经历过前面两个方案的各种限制后我最终选择的是方案三在业务代码层自己封装一个 SearchBar。这个方案本质上不依赖任何社区组件库的“图标定制属性”而是直接把搜索框拆解成基础组件再由自己组合实现。代码是这样的import React, { useState } from react; import { View, TextInput, Pressable, Image, StyleSheet, Platform, } from react-native; // 按平台加载不同资源但视觉保持一致 const searchIconSource Platform.select({ ohos: require(./assets/search-icon-ohos.png), default: require(./assets/search-icon.png), }); type Props { placeholder?: string; onSearch?: (text: string) void; tintColor?: string; }; export const CustomSearchBar ({ placeholder, onSearch, tintColor #333 }: Props) { const [value, setValue] useState(); const handleSubmit () { if (value.trim() onSearch) { onSearch(value.trim()); } }; return ( View style{styles.container} Pressable style{styles.iconWrapper} hitSlop{{ top: 12, bottom: 12, left: 8, right: 8 }} Image source{searchIconSource} style{[styles.icon, { tintColor }]} fadeDuration{0} / /Pressable TextInput style{styles.input} placeholder{placeholder} placeholderTextColor#999 value{value} onChangeText{setValue} onSubmitEditing{handleSubmit} returnKeyTypesearch / /View ); }; const styles StyleSheet.create({ container: { flexDirection: row, alignItems: center, height: 44, borderRadius: 22, backgroundColor: #F2F3F5, paddingHorizontal: 12, }, iconWrapper: { width: 24, height: 24, justifyContent: center, alignItems: center, }, icon: { width: 20, height: 20, resizeMode: contain, }, input: { flex: 1, marginLeft: 8, fontSize: 14, color: #222, paddingVertical: 0, }, });这个方案里我用Platform.select区分了 OpenHarmony 和其他平台。这里有个细节值得说明Platform.select在标准 RN 里默认只识别ios和androidOpenHarmony 的适配层通常会在Platform对象里额外注入ohos这个标识。如果你发现Platform.select拿不到ohos可以直接用Platform.OS ohos来做条件判断效果是一样的。自封装方案最大的优势是完全可控。图标、颜色、尺寸、点击热区、聚焦状态全部由业务代码控制不再被组件库默认实现绑架。而且它可以顺便解决另一个问题组件库在 OpenHarmony 上很多样式不生效。自己封装的组件使用的基础View、TextInput、Image适配层支持度都很高踩坑概率小很多。代价是要花一点时间写样式并处理好三端细节差异。但从长期维护角度看这个成本完全值得。3.4 三种方案对比怎么选才是合理的三种方案我在不同场景下都用过把它们放在一起看会更直观对比维度属性传入方案原生资源替换方案自封装组件方案改造成本最低JS 层改中需要动原生工程中高需要写完整组件维护成本依赖组件库版本原生资源管理可控代码即文档三端一致性取决于组件库实现只影响 OpenHarmony三端统一管理灵活性支持按页面定制全局统一无法差异化支持按页面传参适用场景组件库适配完整全局换肤/换品牌图标长期维护的跨端项目我的建议是如果项目只在 OpenHarmony 上临时用一下选方案二最快如果组件库完全支持属性定制方案一足够但如果是参与长期维护的跨端产品我强烈建议直接上方案三。因为图标定制只是第一步后续迟早会遇到“聚焦颜色变化”“图标右侧增加下拉箭头”“搜索框内增加清空按钮”这些需求自封装组件可以一揽子解决省得每次需求来了都去和组件库斗智斗勇。4. 实操记录从 UI 走查发现不统一到三端表现一致4.1 走查出来的三个不一致点出现得很有代表性这个需求最初的触发点是 UI 走查报告里列出的三个问题。第一个是颜色偏差。设计稿里搜索图标是深灰色#333OpenHarmony 实际渲染出来的却是浅灰色看起来像被蒙了一层白雾。第二个是尺寸偏差。设计稿标注图标显示尺寸是 20vpOpenHarmony 上却渲染成了约 24vp视觉上更大。第三个是点击热区。设计稿要求整个搜索栏高度 44图标本身要被包在可点击区域内但实际效果是图标右侧的输入区域占了大半可点击范围点击图标本身没有反馈。这三个问题其实指向同一个根因默认图标和 Icon 节点都由组件库或适配层的内部实现控制业务侧没有能力通过正常属性去修正。知道了这一点后续的解决思路就清晰了——绕开它们用自己的组件重新实现一个搜索栏。4.2 用最小改动验证可行性避免白费功夫正式动手前我先做了一个“最小验证”在不改组件库代码的前提下临时写了一个独立的小页面页面里用View Image TextInput手动拼了一个搜索栏验证三端渲染效果。这个验证非常关键。因为写代码之前我并不确定基础组件在 OpenHarmony 适配层上对flexDirection、borderRadius、placeholderTextColor这些属性能不能都生效。如果基础组件都渲染不出效果那后面封装的方案就从根上不成立。我在包含 OpenHarmony 模拟器环境的开发机上跑了一遍这个临时页面结果令人满意View的布局、Image的加载、TextInput的输入和回车事件全部正常。只有一个小问题Image加载本地 PNG 时偶尔会出现首帧空白所以后面我在 Image 上加了fadeDuration{0}来规避。这个环节给团队的启发是遇到跨端 UI 问题时先别急着写完整实现用最小页面验证基础能力是最节省时间的做法。4.3 正式实现改为自封装组件并沉淀到公共组件库最小验证通过后我就把临时页面中的代码抽成了正式的CustomSearchBar组件。在抽取过程中做了三件事。第一把图标资源做了平台分离。OpenHarmony 上用了单独的切图其他平台沿用原有图标。虽然最终视觉一致但分开维护可以避免适配层在某些版本上对图片压缩算法处理不一致的问题。第二把颜色用tintColor暴露出来。这样后续如果要更换主题色不需要再改组件内部代码。第三把onSubmitEditing和returnKeyType都接好了确保键盘右下角显示“搜索”按钮点击后能触达业务层。组件写完后我把它放进了团队内部的公共组件库并且补充了使用文档。文档里特别标注了一行OpenHarmony 上不要直接依赖社区组件库的searchIcon属性建议统一使用这个公共组件。这条标注后来帮其他业务线少踩了不少坑。4.4 三端回归与验收检查点比想象中多组件落地后我在 Android、iOS、OpenHarmony 三个平台上分别做了回归。检查点包括默认状态下的图标颜色和尺寸输入框聚焦后图标是否有任何视觉变化点击搜索栏任意区域是否都能聚焦输入键盘右下角按钮文案是否为“搜索”输入内容后点击键盘搜索按钮是否正常回调。执行下来Android 和 iOS 很快就过了。OpenHarmony 上有一个小反复图标在部分场景下颜色对比度不够后来发现是适配层对 PNG 图片的色彩配置文件支持不完整导致部分透明通道的渲染偏差。解决方式也很直接把 PNG 切图导出时“嵌入颜色配置文件”选项去掉重新导出即可。这个问题的排查思路值得记录跨端平台遇到颜色偏差时先区分是“代码设置的颜色”还是“图片本身带了色彩配置”。前者是属性和样式问题后者是素材问题排查方向完全不同。5. 图标定制过程中容易踩的坑逐个记录5.1 替换后不生效大概率是缓存和路径问题图标定制最常遇到的问题是“我改了但页面没变”。这种情况先别急着怀疑代码优先查两件事。第一是资源缓存。RN 在 OpenHarmony 上会有自己的图片缓存机制开发期间反复替换同名图片经常出现旧图还在的现象。处理办法是清理应用数据、卸载重装或者把图片文件名带上版本号比如brand-search-v2.png强制刷新缓存。第二是路径解析。RN 开发中常见require(./assets/search.png)这种写法和打包时生成的资源映射表有关OpenHarmony 适配层在解析require路径时可能和 Android 的解析逻辑不完全一致。遇到这种问题可以在原生侧检查编译后的资源目录看文件是否真的被拷贝进去了。我当时排查时发现适配层确实拷贝了文件但它把文件名做了处理JS 里require的路径映射在原生侧找不到对应文件于是兜底渲染了默认图标。这个问题在适配层升级后修复了但排查过程本身很有参考价值。5.2 图片发虚或尺寸不对先查单位换算OpenHarmony 的界面上常用的单位是vp它和屏幕密度相关和 RN 里的逻辑像素类似。但如果你直接在 OpenHarmony 工程里放一张固定像素的切图再通过 JS 层用width和height控制显示大小偶尔会出现显示尺寸和预期不一致的情况。一个典型的错误是设计师给了 40×40 像素的图标切图你在 JS 里写了width: 40, height: 40。在设备像素比是 2 的屏幕上这个图标会被放大到两倍显示看起来严重偏大。正确做法是JS 层的width按设计稿的逻辑尺寸写比如设计稿标注的是 20就写 20同时准备对应设备像素比的切图资源比如 40×402x或 60×603x。出现尺寸不对时最有效的排查工具是调试器里的节点信息。查看Image节点实际渲染尺寸和代码里的样式尺寸对比偏差很大就说明发生了单位或密度换算问题。5.3 点击区域太小被发版卡了两次搜索图标本身不一定是可点击元素但整个搜索栏通常需要支持点击聚焦。如果只给搜索图标所在的Image外层包了一个尺寸很小的View用户就很难点到正确位置。移动端可访问性规范里建议可点击目标的最小尺寸是 44×44图标只有 20所以必须把外层包裹容器撑到至少 44。RN 里处理这个问题的另一个手段是hitSlop属性Pressable hitSlop{{ top: 12, bottom: 12, left: 8, right: 8 }} onPress{handleSearch} Image source{searchIconSource} style{styles.icon} / /PressablehitSlop表示在视觉范围外额外增加的可点击区域。用这种方式可以在不改变视觉布局的情况下扩大交互热区。这里要特别提醒hitSlop在 OpenHarmony 适配层中是否原生支持需要单独验证。如果不支持就老老实实把包裹层的宽高设成 44同时让图片居中对齐。5.4 改 node_modules 里的源码升级依赖时全丢这个坑很多人会踩。组件库的searchIcon属性不支持定制时直觉反应是直接打开node_modules里的 SearchBar 源码把默认 Icon 改成自己的。在本地跑确实能生效但副作用很严重。首先node_modules在团队协作里不会提交到代码仓库别人拉代码后并没有你的改动。其次一旦执行安装或升级依赖改动会全部丢失。第三直接改三方库源码会掩盖真实问题导致后续排查困难。我自己早期犯过这个错后来看到一份代码里改了三个组件库的源码升级后整个 UI 崩了一片才彻底改掉这个习惯。正确的做法是一开始就走自封装方案或者给组件库提 PR。即便要快速绕过问题也应该通过组件包装、属性覆盖等方式解决而不是动库源码。6. 团队项目里怎么维护这套定制方案6.1 用一份组件代码和平台差异文件收敛逻辑自封装组件写到后面不只是搜索图标一件事还会有搜索框高度、清除按钮、取消按钮、历史搜索记录等模块。这时候如果全部写在同一个文件里文件会越来越长维护成本会快速上升。更好的做法是用平台差异文件来拆开实现。RN 社区常用的目录组织方式如下components/ ├── SearchBar/ │ ├── SearchBar.tsx # 公共逻辑与样式 │ ├── SearchBar.ohos.tsx # OpenHarmony 差异实现 │ ├── SearchBar.android.tsx # Android 差异实现 │ └── SearchBar.ios.tsx # iOS 差异实现在SearchBar.tsx里统一导出接口内部通过Platform判断或直接使用差异文件。以图标颜色为例OpenHarmony 上加载 PNG 后使用tintColor染色的效果不稳我就把 OHOS 版本改为直接使用对应颜色的切图而 Android 和 iOS 继续用原始图标加染色。这个做法能保证视觉一致同时把平台差异关进独立的文件里。6.2 图标资源的包体积与加载性能取舍搜索图标这种小元素对包体积的影响可以忽略不计但选择资源格式时还是要有原则。我对比过三种常见方式资源类型优点缺点适用场景PNG 静态图兼容性最好加载最稳多密度需要多套切图兼容性优先SVG 矢量图一个文件适配任意尺寸部分适配层解码有兼容问题设计稿纯矢量图标字体图标颜色控制灵活体积小需要引入字体文件嵌入图层的兼容性依赖字体大量图标统一管理就 OpenHarmony 当前适配层的成熟度来说我优先推荐 PNG。不是因为技术上 PNG 更好而是因为它少一层兼容性风险。图标一旦带上透明通道和细线条SVG 在某些适配版本上容易出现毛边或解析失败。等适配层进一步成熟后再考虑切换 SVG 或字体图标也不迟。6.3 组件落地时的自查清单发给协作同事用为了确保团队里其他人使用自封装搜索栏时不会再次踩坑我把经验整理成了一份自查清单。这里也分享出来可以直接照着做检查项达成标准图标资源使用不用社区组件库的 searchIcon 默认属性图标素材格式优先 PNG导出时不嵌入颜色配置文件图标显示尺寸使用逻辑尺寸数量级与设计稿一致点击热区包裹层或 hitSlop 确保 44×44 以上平台差异OpenHarmony 单独维护差异文件缓存问题同名资源替换后清理应用数据验证依赖升级使用公共组件不修改 node_modules 源码文档同步在组件库文档里标注 OpenHarmony 注意事项这套清单后来被产品团队直接放进了跨端 UI 规范文档前端开发、原生开发甚至合作的测试同学都能拿来对照。对一个“看起来很小”的搜索图标定制需求来说能有这样一份沉淀已经超出预期了。最后再分享一点我自己的体会。图标定制这类需求表面上是资源替换实际上考验的是对跨端渲染链路的理解图标从哪来、经过哪些层、被谁拦截、怎么兜底。只要你把链路摸透再遇到类似的需求都不会慌。我在这个项目里最大的收获不是在 OpenHarmony 上把图标改好了而是终于搞清楚了 RN 到 ArkUI 之间那层“虚虚实实”的映射关系。以后再碰到搜索框样式、输入框行为、键盘交互相关的需求我都能直接判断该在哪一层解决而不需要一层层试错。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑