HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

如何解决NavDestination切换页面后浏览位置无法保存问题

问题现象
在HarmonyOS中,使用NavDestination实现页面跳转至其他页面后,下次进入如何保持跳转前页面的浏览位置?

背景知识
Navigation:Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(NavDestination的子组件)或非首页显示(NavDestination的子组件),首页和非首页通过路由进行切换。
@ohos.arkui.observer(无感监听)提供UI组件行为变化的无感监听能力。可以监听Navigation的页面切换事件进行相应操作。
Scroll是一种可滚动的容器组件,当子组件的布局尺寸超过父组件的尺寸时,内容可以滚动。
onDidScroll方法在Scroll滚动时触发,可用于在滑动过程中获取Scroll组件的偏移量yOffset。
scrollTo方法可用于让Scroll组件滑动到指定位置。
AppStorage是应用全局的UI状态存储,和应用的进程绑定,只能在UI主线程中使用,无法在子线程中使用、修改。
解决方案
方案一:使用路由模式保留页面实例。
在页面跳转时不要使用pop和clear等方法,否则NavDestination页面会被回收。可以采用单例模式MOVE_TO_TOP_SINGLETON跳转至指定的页面,该方式会使用栈内已存在的页面实例(即浏览位置不变)。

由于单例模式是从栈底到栈顶依次查找,当栈内存在多个同名页面实例时,会默认跳转最底层的同名页面实例,所以需确保栈内只存在一个同名实例,否则跳转的页面保留的滚动位置与上一次显示的页面会不一致(显示的是栈底同名实例保留的滚动位置)。
https://pastebin.com/Kvfw56Ui
https://pastebin.com/6Jk0iJHg
https://pastebin.com/aHSWm99J
https://pastebin.com/FgCAfbE3
https://pastebin.com/TdJAtZuS
https://pastebin.com/t5prk0xM
https://pastebin.com/9KBv8p6Z
https://pastebin.com/QzHRmSST
https://pastebin.com/EYerCiYE
https://pastebin.com/KQYtdiVR
https://pastebin.com/qPDGQpr7
https://pastebin.com/Ur2cbXAg
https://pastebin.com/niVM6VLk
https://pastebin.com/XpBnqUwS
https://pastebin.com/ndDMLQMC
https://pastebin.com/Fe0WC3pa
https://pastebin.com/RrnvPE1w
https://pastebin.com/bD5WPwRg
https://pastebin.com/YDh64vkT
https://pastebin.com/4LWHr9jc
https://pastebin.com/DCtRCCCk
https://pastebin.com/3p2Jzncu
https://pastebin.com/T3SJ62ar
https://pastebin.com/GKfL979H
https://pastebin.com/XMYGtPje
https://pastebin.com/rzXKvcuv
https://pastebin.com/JvR7cH5d
https://pastebin.com/3FDVEcuX
https://pastebin.com/h6cUiaBF
https://pastebin.com/ME4peSzL
https://pastebin.com/N5qAacXz
https://pastebin.com/JZZwHd6Z
https://pastebin.com/fGN6CmDR
https://pastebin.com/K3EVxehv
https://pastebin.com/PqCXWDDh
https://pastebin.com/fqusPVdu
https://pastebin.com/Dvt50mhL
https://pastebin.com/CtGAWTga
https://pastebin.com/XyuX26ci
https://pastebin.com/d9K2WJJt
https://pastebin.com/GwHXXvtC
https://pastebin.com/DDCwB3nj
https://pastebin.com/w0SKXPMz
https://pastebin.com/pN4H6zQh
https://pastebin.com/2MEDMTDa
https://pastebin.com/Km8YREQ6
https://pastebin.com/JCDkV4YW
https://pastebin.com/DVzuaCcx
https://pastebin.com/uc5iwWuj
https://pastebin.com/gNCWP8Qc
https://pastebin.com/Yu8Egw5s
https://pastebin.com/0LyQQjKP
https://pastebin.com/w5KFZYZd
https://pastebin.com/675wTRDu
https://pastebin.com/q3HydkUg
https://pastebin.com/zw5u9Qdi
https://pastebin.com/mzFWd75m
https://pastebin.com/xa0XPcNr
https://pastebin.com/YTTmLc1J
https://pastebin.com/81JwSJWW
https://pastebin.com/JZ5Yd8mP
https://pastebin.com/HYPHRp3p
https://pastebin.com/i7UKj8g6
https://pastebin.com/eS8TWDJF
https://pastebin.com/s17FvZ9R
https://pastebin.com/YG3qffNc
https://pastebin.com/Jm6jQ9Hr
https://pastebin.com/RyYPmYMa
https://pastebin.com/rtcK0Z53
https://pastebin.com/GX1W9zHA
https://pastebin.com/MydzWJwB
https://pastebin.com/sfxsFT66
https://pastebin.com/aayDqQsH
https://pastebin.com/GHia1M2L
https://pastebin.com/tHvSWiGS
https://pastebin.com/cJmt5rpy
https://pastebin.com/JYDkdGLs
https://pastebin.com/stRVBXTH
https://pastebin.com/G8gY33rM
https://pastebin.com/yWTE4s8z
https://pastebin.com/bF237U4E
https://pastebin.com/A2XjbJFL
https://pastebin.com/CMPsmXHW
https://pastebin.com/XBnbf5yR
https://pastebin.com/2WTSxuZH
https://pastebin.com/x9TYHnnR
https://pastebin.com/yr442rZ9
https://pastebin.com/kTQXdYBq
https://pastebin.com/sXG2mktr
https://pastebin.com/sHKZkR2S
https://pastebin.com/VgaMNyjP
https://pastebin.com/saBuBbfx
https://pastebin.com/Akn339vN
https://pastebin.com/LxJpgWdH
https://pastebin.com/gCUJtG1r
https://pastebin.com/bNS4mhKg
https://pastebin.com/PKcfHFsC
https://pastebin.com/3cMHb88V
https://pastebin.com/3HyqCceQ
https://pastebin.com/NpPEKWNc
https://pastebin.com/Mxr4rfx3
https://pastebin.com/1ND8zgqs
https://pastebin.com/Bk8zT2RD
https://pastebin.com/PivBT23m
https://pastebin.com/PhBTFTus
https://pastebin.com/iRW432jR
https://pastebin.com/W4Euyfpd
https://pastebin.com/E9JLP4M1
https://pastebin.com/2G53rfER
https://pastebin.com/GCiDaiZh
https://pastebin.com/jd9TTX9d
https://pastebin.com/Ah3LCi7e
https://pastebin.com/mNF9WeS7
https://pastebin.com/aKzY3GUc
https://pastebin.com/n7cevaYk
https://pastebin.com/GDDDzUuy
https://pastebin.com/tyx4arNi
https://pastebin.com/j54FMwvB
https://pastebin.com/2cRztMQY
https://pastebin.com/G6WWzmMF
https://pastebin.com/eVszwUfs
https://pastebin.com/D4rYGpE6
https://pastebin.com/6Jya9VEL
https://pastebin.com/vyFWsBCr
https://pastebin.com/pv7BP9vr
https://pastebin.com/RhR9FeUP
https://pastebin.com/vWxFY2YW
https://pastebin.com/Lairj5Ld
https://pastebin.com/jwQKSavR
https://pastebin.com/8GvaRTz1
https://pastebin.com/3YHX2qmE
https://pastebin.com/kssYcnr7
https://pastebin.com/NtnKhtYY
https://pastebin.com/Fz6cc5Le
https://pastebin.com/icc6WRsj
https://pastebin.com/wWk9nFRp
https://pastebin.com/eXQgBJMX
https://pastebin.com/z0xrXUZ3
https://pastebin.com/spSBiP8J
https://pastebin.com/AaUJmpHM
https://pastebin.com/3x1w4uHd
https://pastebin.com/pKZvNg7m
https://pastebin.com/Qb6vxDTQ
https://pastebin.com/P0S6wfBk
https://pastebin.com/444CJvwY
https://pastebin.com/7MkiVbks
https://pastebin.com/45wrx7jX
https://pastebin.com/J6M4Hh9S
https://pastebin.com/T5gQ6kJV
https://pastebin.com/h4K76YnL
https://pastebin.com/Kmx8rkB5
https://pastebin.com/42F7A6X9
https://pastebin.com/qnTdJLyj
https://pastebin.com/LTBywbqr
https://pastebin.com/2sQhNdXp
https://pastebin.com/mhSnZhNt
https://pastebin.com/wEfqig2G
https://pastebin.com/HbyYyFs0
https://pastebin.com/vUXzYbcc
https://pastebin.com/nDJnT1yM
https://pastebin.com/DKM75CX4
https://pastebin.com/hB0980pZ
https://pastebin.com/Nk6s4uGj
https://pastebin.com/PJf3D7tg
https://pastebin.com/5Sr8y30c
https://pastebin.com/huf9nsJ4
https://pastebin.com/xtBzF05M
https://pastebin.com/JFmF4u1f
https://pastebin.com/4zmGeM48
https://pastebin.com/UB9TNyxW
https://pastebin.com/cXSRyukE
https://pastebin.com/XdhcwfBp
https://pastebin.com/UYMVPFgN
https://pastebin.com/c62H8NxQ
https://pastebin.com/84DXZjfQ
https://pastebin.com/fFepWW4H
https://pastebin.com/3Sq1TF6k
https://pastebin.com/SQPTntKg
https://pastebin.com/khc1nD0w
https://pastebin.com/p8beJJva
https://pastebin.com/9LfnVJAJ
https://pastebin.com/M6QchRZ9
https://pastebin.com/Egxy8RxR
https://pastebin.com/D9v72rK6
https://pastebin.com/82dq2ZHB
https://pastebin.com/WtWcMEAa
https://pastebin.com/FhzkMMw1
https://pastebin.com/s5kf22wS
https://pastebin.com/kxXm99HH
https://pastebin.com/ZeUdrbC7
https://pastebin.com/Uyd0wkV5
https://pastebin.com/Gj32PSKS
https://pastebin.com/QWZZkFKR
https://pastebin.com/Hd2BgPS5
https://pastebin.com/hdiUJFS0
https://pastebin.com/u2Gt9cfq
https://pastebin.com/0vHYKc8F
https://pastebin.com/TZVHGvLR
https://pastebin.com/VFxecajq
https://pastebin.com/nWj4HsBJ
https://pastebin.com/G8GUM8fz
https://pastebin.com/LReXd1m0
https://pastebin.com/fpQnrYTL
https://pastebin.com/RyDHm8nK
https://pastebin.com/4gAzEceK
https://pastebin.com/AgGD7Sw8
https://pastebin.com/Zh7srRfN
https://pastebin.com/2y9BHBvR
https://pastebin.com/cZ9yHWab
https://pastebin.com/NRHZcAUe
https://pastebin.com/qfC6uqGY
https://pastebin.com/pzbatnT2
https://pastebin.com/pytQrM3n
https://pastebin.com/zv1bEjfh
https://pastebin.com/Z7CHKjjW
https://pastebin.com/73NZB1fg
https://pastebin.com/zb96CYYT
https://pastebin.com/TVSbCuk0
https://pastebin.com/PQH1YKrR
https://pastebin.com/bv5qqT8j
https://pastebin.com/WpenkS9J
https://pastebin.com/jkgzXhCX
https://pastebin.com/pT7xkBGP
https://pastebin.com/ppyQuy1c
https://pastebin.com/LdT3rmMu
https://pastebin.com/EVTt0G5t
https://pastebin.com/Lv4a1muV
https://pastebin.com/zmTAWL2U
https://pastebin.com/QdxecLbK
https://pastebin.com/3kZ5NwrU
https://pastebin.com/TPJsBatd
https://pastebin.com/WfhnNpFV
https://pastebin.com/SAmdt79t
https://pastebin.com/JZ4KvEWL
https://pastebin.com/uGcyWALB
https://pastebin.com/MEq4JbqR
https://pastebin.com/3ucqcbc6
https://pastebin.com/3cDtaAwF
https://pastebin.com/yzn2GGYf
https://pastebin.com/RTjPyJNX
https://pastebin.com/SQDC9M1E
https://pastebin.com/xcasG7xf
https://pastebin.com/zZfPyQY3
https://pastebin.com/RNzWpA4q
https://pastebin.com/8pufepjf
https://pastebin.com/vxDSuXem
https://pastebin.com/HP4y0h1f
https://pastebin.com/46jYNt7j
https://pastebin.com/YUvcKeAw
https://pastebin.com/wGfKDBZe
https://pastebin.com/bccZqgn7
https://pastebin.com/cBisnNN3
https://pastebin.com/4WFqkrmi
https://pastebin.com/fc7jp78E
https://pastebin.com/yjptCxY9
https://pastebin.com/2D6R3N5s
https://pastebin.com/KvR4cDki
https://pastebin.com/Vk1Rk7uj
https://pastebin.com/JEiNNYpi
https://pastebin.com/PyzV38G0
https://pastebin.com/KbzwD20r
https://pastebin.com/ViKS1JgQ
https://pastebin.com/5YcYwqDE
https://pastebin.com/ZFMU4ndk
https://pastebin.com/0Ex2wTma
https://pastebin.com/pQ7MD6DZ
https://pastebin.com/UCTHHnqH
https://pastebin.com/sDEyLgsy
https://pastebin.com/Z7Wrv3qq
https://pastebin.com/qb5YncFh
https://pastebin.com/uibzH23E
https://pastebin.com/4ykQaXqk
https://pastebin.com/K5mKVf1G
https://pastebin.com/xYEugHiP
https://pastebin.com/z8JzmxYY
https://pastebin.com/0UXR57Di
https://pastebin.com/0hmA61Hd
https://pastebin.com/tPkKjDC1
https://pastebin.com/v0ra9Mya
https://pastebin.com/puHjxuHP
https://pastebin.com/fYS5Dnw5
https://pastebin.com/xDwmcBVp
https://pastebin.com/vYi6rTmN

继续阅读 »

问题现象
在HarmonyOS中,使用NavDestination实现页面跳转至其他页面后,下次进入如何保持跳转前页面的浏览位置?

背景知识
Navigation:Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(NavDestination的子组件)或非首页显示(NavDestination的子组件),首页和非首页通过路由进行切换。
@ohos.arkui.observer(无感监听)提供UI组件行为变化的无感监听能力。可以监听Navigation的页面切换事件进行相应操作。
Scroll是一种可滚动的容器组件,当子组件的布局尺寸超过父组件的尺寸时,内容可以滚动。
onDidScroll方法在Scroll滚动时触发,可用于在滑动过程中获取Scroll组件的偏移量yOffset。
scrollTo方法可用于让Scroll组件滑动到指定位置。
AppStorage是应用全局的UI状态存储,和应用的进程绑定,只能在UI主线程中使用,无法在子线程中使用、修改。
解决方案
方案一:使用路由模式保留页面实例。
在页面跳转时不要使用pop和clear等方法,否则NavDestination页面会被回收。可以采用单例模式MOVE_TO_TOP_SINGLETON跳转至指定的页面,该方式会使用栈内已存在的页面实例(即浏览位置不变)。

由于单例模式是从栈底到栈顶依次查找,当栈内存在多个同名页面实例时,会默认跳转最底层的同名页面实例,所以需确保栈内只存在一个同名实例,否则跳转的页面保留的滚动位置与上一次显示的页面会不一致(显示的是栈底同名实例保留的滚动位置)。
https://pastebin.com/Kvfw56Ui
https://pastebin.com/6Jk0iJHg
https://pastebin.com/aHSWm99J
https://pastebin.com/FgCAfbE3
https://pastebin.com/TdJAtZuS
https://pastebin.com/t5prk0xM
https://pastebin.com/9KBv8p6Z
https://pastebin.com/QzHRmSST
https://pastebin.com/EYerCiYE
https://pastebin.com/KQYtdiVR
https://pastebin.com/qPDGQpr7
https://pastebin.com/Ur2cbXAg
https://pastebin.com/niVM6VLk
https://pastebin.com/XpBnqUwS
https://pastebin.com/ndDMLQMC
https://pastebin.com/Fe0WC3pa
https://pastebin.com/RrnvPE1w
https://pastebin.com/bD5WPwRg
https://pastebin.com/YDh64vkT
https://pastebin.com/4LWHr9jc
https://pastebin.com/DCtRCCCk
https://pastebin.com/3p2Jzncu
https://pastebin.com/T3SJ62ar
https://pastebin.com/GKfL979H
https://pastebin.com/XMYGtPje
https://pastebin.com/rzXKvcuv
https://pastebin.com/JvR7cH5d
https://pastebin.com/3FDVEcuX
https://pastebin.com/h6cUiaBF
https://pastebin.com/ME4peSzL
https://pastebin.com/N5qAacXz
https://pastebin.com/JZZwHd6Z
https://pastebin.com/fGN6CmDR
https://pastebin.com/K3EVxehv
https://pastebin.com/PqCXWDDh
https://pastebin.com/fqusPVdu
https://pastebin.com/Dvt50mhL
https://pastebin.com/CtGAWTga
https://pastebin.com/XyuX26ci
https://pastebin.com/d9K2WJJt
https://pastebin.com/GwHXXvtC
https://pastebin.com/DDCwB3nj
https://pastebin.com/w0SKXPMz
https://pastebin.com/pN4H6zQh
https://pastebin.com/2MEDMTDa
https://pastebin.com/Km8YREQ6
https://pastebin.com/JCDkV4YW
https://pastebin.com/DVzuaCcx
https://pastebin.com/uc5iwWuj
https://pastebin.com/gNCWP8Qc
https://pastebin.com/Yu8Egw5s
https://pastebin.com/0LyQQjKP
https://pastebin.com/w5KFZYZd
https://pastebin.com/675wTRDu
https://pastebin.com/q3HydkUg
https://pastebin.com/zw5u9Qdi
https://pastebin.com/mzFWd75m
https://pastebin.com/xa0XPcNr
https://pastebin.com/YTTmLc1J
https://pastebin.com/81JwSJWW
https://pastebin.com/JZ5Yd8mP
https://pastebin.com/HYPHRp3p
https://pastebin.com/i7UKj8g6
https://pastebin.com/eS8TWDJF
https://pastebin.com/s17FvZ9R
https://pastebin.com/YG3qffNc
https://pastebin.com/Jm6jQ9Hr
https://pastebin.com/RyYPmYMa
https://pastebin.com/rtcK0Z53
https://pastebin.com/GX1W9zHA
https://pastebin.com/MydzWJwB
https://pastebin.com/sfxsFT66
https://pastebin.com/aayDqQsH
https://pastebin.com/GHia1M2L
https://pastebin.com/tHvSWiGS
https://pastebin.com/cJmt5rpy
https://pastebin.com/JYDkdGLs
https://pastebin.com/stRVBXTH
https://pastebin.com/G8gY33rM
https://pastebin.com/yWTE4s8z
https://pastebin.com/bF237U4E
https://pastebin.com/A2XjbJFL
https://pastebin.com/CMPsmXHW
https://pastebin.com/XBnbf5yR
https://pastebin.com/2WTSxuZH
https://pastebin.com/x9TYHnnR
https://pastebin.com/yr442rZ9
https://pastebin.com/kTQXdYBq
https://pastebin.com/sXG2mktr
https://pastebin.com/sHKZkR2S
https://pastebin.com/VgaMNyjP
https://pastebin.com/saBuBbfx
https://pastebin.com/Akn339vN
https://pastebin.com/LxJpgWdH
https://pastebin.com/gCUJtG1r
https://pastebin.com/bNS4mhKg
https://pastebin.com/PKcfHFsC
https://pastebin.com/3cMHb88V
https://pastebin.com/3HyqCceQ
https://pastebin.com/NpPEKWNc
https://pastebin.com/Mxr4rfx3
https://pastebin.com/1ND8zgqs
https://pastebin.com/Bk8zT2RD
https://pastebin.com/PivBT23m
https://pastebin.com/PhBTFTus
https://pastebin.com/iRW432jR
https://pastebin.com/W4Euyfpd
https://pastebin.com/E9JLP4M1
https://pastebin.com/2G53rfER
https://pastebin.com/GCiDaiZh
https://pastebin.com/jd9TTX9d
https://pastebin.com/Ah3LCi7e
https://pastebin.com/mNF9WeS7
https://pastebin.com/aKzY3GUc
https://pastebin.com/n7cevaYk
https://pastebin.com/GDDDzUuy
https://pastebin.com/tyx4arNi
https://pastebin.com/j54FMwvB
https://pastebin.com/2cRztMQY
https://pastebin.com/G6WWzmMF
https://pastebin.com/eVszwUfs
https://pastebin.com/D4rYGpE6
https://pastebin.com/6Jya9VEL
https://pastebin.com/vyFWsBCr
https://pastebin.com/pv7BP9vr
https://pastebin.com/RhR9FeUP
https://pastebin.com/vWxFY2YW
https://pastebin.com/Lairj5Ld
https://pastebin.com/jwQKSavR
https://pastebin.com/8GvaRTz1
https://pastebin.com/3YHX2qmE
https://pastebin.com/kssYcnr7
https://pastebin.com/NtnKhtYY
https://pastebin.com/Fz6cc5Le
https://pastebin.com/icc6WRsj
https://pastebin.com/wWk9nFRp
https://pastebin.com/eXQgBJMX
https://pastebin.com/z0xrXUZ3
https://pastebin.com/spSBiP8J
https://pastebin.com/AaUJmpHM
https://pastebin.com/3x1w4uHd
https://pastebin.com/pKZvNg7m
https://pastebin.com/Qb6vxDTQ
https://pastebin.com/P0S6wfBk
https://pastebin.com/444CJvwY
https://pastebin.com/7MkiVbks
https://pastebin.com/45wrx7jX
https://pastebin.com/J6M4Hh9S
https://pastebin.com/T5gQ6kJV
https://pastebin.com/h4K76YnL
https://pastebin.com/Kmx8rkB5
https://pastebin.com/42F7A6X9
https://pastebin.com/qnTdJLyj
https://pastebin.com/LTBywbqr
https://pastebin.com/2sQhNdXp
https://pastebin.com/mhSnZhNt
https://pastebin.com/wEfqig2G
https://pastebin.com/HbyYyFs0
https://pastebin.com/vUXzYbcc
https://pastebin.com/nDJnT1yM
https://pastebin.com/DKM75CX4
https://pastebin.com/hB0980pZ
https://pastebin.com/Nk6s4uGj
https://pastebin.com/PJf3D7tg
https://pastebin.com/5Sr8y30c
https://pastebin.com/huf9nsJ4
https://pastebin.com/xtBzF05M
https://pastebin.com/JFmF4u1f
https://pastebin.com/4zmGeM48
https://pastebin.com/UB9TNyxW
https://pastebin.com/cXSRyukE
https://pastebin.com/XdhcwfBp
https://pastebin.com/UYMVPFgN
https://pastebin.com/c62H8NxQ
https://pastebin.com/84DXZjfQ
https://pastebin.com/fFepWW4H
https://pastebin.com/3Sq1TF6k
https://pastebin.com/SQPTntKg
https://pastebin.com/khc1nD0w
https://pastebin.com/p8beJJva
https://pastebin.com/9LfnVJAJ
https://pastebin.com/M6QchRZ9
https://pastebin.com/Egxy8RxR
https://pastebin.com/D9v72rK6
https://pastebin.com/82dq2ZHB
https://pastebin.com/WtWcMEAa
https://pastebin.com/FhzkMMw1
https://pastebin.com/s5kf22wS
https://pastebin.com/kxXm99HH
https://pastebin.com/ZeUdrbC7
https://pastebin.com/Uyd0wkV5
https://pastebin.com/Gj32PSKS
https://pastebin.com/QWZZkFKR
https://pastebin.com/Hd2BgPS5
https://pastebin.com/hdiUJFS0
https://pastebin.com/u2Gt9cfq
https://pastebin.com/0vHYKc8F
https://pastebin.com/TZVHGvLR
https://pastebin.com/VFxecajq
https://pastebin.com/nWj4HsBJ
https://pastebin.com/G8GUM8fz
https://pastebin.com/LReXd1m0
https://pastebin.com/fpQnrYTL
https://pastebin.com/RyDHm8nK
https://pastebin.com/4gAzEceK
https://pastebin.com/AgGD7Sw8
https://pastebin.com/Zh7srRfN
https://pastebin.com/2y9BHBvR
https://pastebin.com/cZ9yHWab
https://pastebin.com/NRHZcAUe
https://pastebin.com/qfC6uqGY
https://pastebin.com/pzbatnT2
https://pastebin.com/pytQrM3n
https://pastebin.com/zv1bEjfh
https://pastebin.com/Z7CHKjjW
https://pastebin.com/73NZB1fg
https://pastebin.com/zb96CYYT
https://pastebin.com/TVSbCuk0
https://pastebin.com/PQH1YKrR
https://pastebin.com/bv5qqT8j
https://pastebin.com/WpenkS9J
https://pastebin.com/jkgzXhCX
https://pastebin.com/pT7xkBGP
https://pastebin.com/ppyQuy1c
https://pastebin.com/LdT3rmMu
https://pastebin.com/EVTt0G5t
https://pastebin.com/Lv4a1muV
https://pastebin.com/zmTAWL2U
https://pastebin.com/QdxecLbK
https://pastebin.com/3kZ5NwrU
https://pastebin.com/TPJsBatd
https://pastebin.com/WfhnNpFV
https://pastebin.com/SAmdt79t
https://pastebin.com/JZ4KvEWL
https://pastebin.com/uGcyWALB
https://pastebin.com/MEq4JbqR
https://pastebin.com/3ucqcbc6
https://pastebin.com/3cDtaAwF
https://pastebin.com/yzn2GGYf
https://pastebin.com/RTjPyJNX
https://pastebin.com/SQDC9M1E
https://pastebin.com/xcasG7xf
https://pastebin.com/zZfPyQY3
https://pastebin.com/RNzWpA4q
https://pastebin.com/8pufepjf
https://pastebin.com/vxDSuXem
https://pastebin.com/HP4y0h1f
https://pastebin.com/46jYNt7j
https://pastebin.com/YUvcKeAw
https://pastebin.com/wGfKDBZe
https://pastebin.com/bccZqgn7
https://pastebin.com/cBisnNN3
https://pastebin.com/4WFqkrmi
https://pastebin.com/fc7jp78E
https://pastebin.com/yjptCxY9
https://pastebin.com/2D6R3N5s
https://pastebin.com/KvR4cDki
https://pastebin.com/Vk1Rk7uj
https://pastebin.com/JEiNNYpi
https://pastebin.com/PyzV38G0
https://pastebin.com/KbzwD20r
https://pastebin.com/ViKS1JgQ
https://pastebin.com/5YcYwqDE
https://pastebin.com/ZFMU4ndk
https://pastebin.com/0Ex2wTma
https://pastebin.com/pQ7MD6DZ
https://pastebin.com/UCTHHnqH
https://pastebin.com/sDEyLgsy
https://pastebin.com/Z7Wrv3qq
https://pastebin.com/qb5YncFh
https://pastebin.com/uibzH23E
https://pastebin.com/4ykQaXqk
https://pastebin.com/K5mKVf1G
https://pastebin.com/xYEugHiP
https://pastebin.com/z8JzmxYY
https://pastebin.com/0UXR57Di
https://pastebin.com/0hmA61Hd
https://pastebin.com/tPkKjDC1
https://pastebin.com/v0ra9Mya
https://pastebin.com/puHjxuHP
https://pastebin.com/fYS5Dnw5
https://pastebin.com/xDwmcBVp
https://pastebin.com/vYi6rTmN

收起阅读 »

如何设置APP内全局字体大小

问题现象
在文本量多而杂的场景下,单独给每个Text文本设置字体大小效率不高,有什么方法能够设置APP内的全局字体大小?以便统一设置字体大小,提高效率。

背景知识
动态属性是动态设置组件的属性,支持开发者在属性设置时使用if/else语法,且根据需要使用多态样式设置属性。其属性方法AttributeModifier支持在当前组件上动态设置属性方法。
Text文本组件中的fontSize属性可以设置字体大小,fontFamily属性可以设置字体列表。
接口ApplicationContext.setFontSizeScale设置应用字体大小缩放比例。仅支持主线程调用。当应用字体设置为跟随系统时,通过配置configuration标签就可以设置应用字体大小跟随系统变化的比例。
解决方案
方案一:通过preferences调节应用内全局字体大小。
自定义PreferencesUtil类,通过其提供的创建、保存和查询的数据,将读取到的数据保存到页面带有@State的变量中,通过状态变量对文本字体大小进行设置。具体应用可以参考官网使用preferences实现应用内字体大小调节功能。

方案二:通过动态属性设置全局字体大小。
使用动态属性,自定义class实现AttributeModifier接口,设定好Text需要的fontSize后在页面调用,实现字体大小统一修改。

class MyTextModifier implements AttributeModifier<TextAttribute> {
public isDark: boolean = false;

applyNormalAttribute(instance: TextAttribute): void {
if (this.isDark) {
instance.fontSize(100);
} else {
instance.fontSize(50);
}
}
}

@Entry
@Component
struct Index {
private message: string = 'test';
@State modifier: MyTextModifier = new MyTextModifier();

build() {
Column() {
Text(this.message)
.attributeModifier(this.modifier)
.onClick(() => {
this.modifier.isDark = !this.modifier.isDark;
});
Blank();
Text(this.message)
.attributeModifier(this.modifier)
.onClick(() => {
this.modifier.isDark = !this.modifier.isDark;
});
}
.padding(24)
.width('100%')
.height('100%');
}
}
https://pastebin.com/zv1bEjfh
https://pastebin.com/Z7CHKjjW
https://pastebin.com/73NZB1fg
https://pastebin.com/zb96CYYT
https://pastebin.com/TVSbCuk0
https://pastebin.com/PQH1YKrR
https://pastebin.com/bv5qqT8j
https://pastebin.com/WpenkS9J
https://pastebin.com/jkgzXhCX
https://pastebin.com/pT7xkBGP
https://pastebin.com/ppyQuy1c
https://pastebin.com/LdT3rmMu
https://pastebin.com/EVTt0G5t
https://pastebin.com/Lv4a1muV
https://pastebin.com/zmTAWL2U
https://pastebin.com/QdxecLbK
https://pastebin.com/3kZ5NwrU
https://pastebin.com/TPJsBatd
https://pastebin.com/WfhnNpFV
https://pastebin.com/SAmdt79t
https://pastebin.com/JZ4KvEWL
https://pastebin.com/uGcyWALB
https://pastebin.com/MEq4JbqR
https://pastebin.com/3ucqcbc6
https://pastebin.com/3cDtaAwF
https://pastebin.com/yzn2GGYf
https://pastebin.com/RTjPyJNX
https://pastebin.com/SQDC9M1E
https://pastebin.com/xcasG7xf
https://pastebin.com/zZfPyQY3
https://pastebin.com/RNzWpA4q
https://pastebin.com/8pufepjf
https://pastebin.com/vxDSuXem
https://pastebin.com/HP4y0h1f
https://pastebin.com/46jYNt7j
https://pastebin.com/YUvcKeAw
https://pastebin.com/wGfKDBZe
https://pastebin.com/bccZqgn7
https://pastebin.com/cBisnNN3
https://pastebin.com/4WFqkrmi
https://pastebin.com/fc7jp78E
https://pastebin.com/yjptCxY9
https://pastebin.com/2D6R3N5s
https://pastebin.com/KvR4cDki
https://pastebin.com/Vk1Rk7uj
https://pastebin.com/JEiNNYpi
https://pastebin.com/PyzV38G0
https://pastebin.com/KbzwD20r
https://pastebin.com/ViKS1JgQ
https://pastebin.com/5YcYwqDE
https://pastebin.com/ZFMU4ndk
https://pastebin.com/0Ex2wTma
https://pastebin.com/pQ7MD6DZ
https://pastebin.com/UCTHHnqH
https://pastebin.com/sDEyLgsy
https://pastebin.com/Z7Wrv3qq
https://pastebin.com/qb5YncFh
https://pastebin.com/uibzH23E
https://pastebin.com/4ykQaXqk
https://pastebin.com/K5mKVf1G
https://pastebin.com/xYEugHiP
https://pastebin.com/z8JzmxYY
https://pastebin.com/0UXR57Di
https://pastebin.com/0hmA61Hd
https://pastebin.com/tPkKjDC1
https://pastebin.com/v0ra9Mya
https://pastebin.com/puHjxuHP
https://pastebin.com/fYS5Dnw5
https://pastebin.com/xDwmcBVp
https://pastebin.com/vYi6rTmN
https://pastebin.com/yx39A9W3
https://pastebin.com/YjGpgumr
https://pastebin.com/Yr3NDGsw
https://pastebin.com/mHQDdmYW
https://pastebin.com/zQj53Zez
https://pastebin.com/BPjewhxX
https://pastebin.com/zQ0vrSFY
https://pastebin.com/1w62VYp5
https://pastebin.com/h4KEm2mW
https://pastebin.com/fTskMDFx
https://pastebin.com/FmNtGTnb
https://pastebin.com/16dZdmr6
https://pastebin.com/GDKtKnBU
https://pastebin.com/s1CTn9wk
https://pastebin.com/HWayJh7D
https://pastebin.com/sbNvhpjd
https://pastebin.com/8QS7hR6z
https://pastebin.com/BNmr0siT
https://pastebin.com/wSeQ93jQ
https://pastebin.com/mWDHpM97
https://pastebin.com/n95D4DU9
https://pastebin.com/WwyN4MSy
https://pastebin.com/Yy5piny4
https://pastebin.com/M5eG7d97
https://pastebin.com/tecUdChP
https://pastebin.com/YizPCgVe
https://pastebin.com/k2QgxpVx
https://pastebin.com/L874Auw2
https://pastebin.com/i7xaQUHV
https://pastebin.com/6RYNSaMD
https://pastebin.com/EHGryvUF
https://pastebin.com/mBy1dH2W
https://pastebin.com/4Rv7wPLE
https://pastebin.com/
https://pastebin.com/sc89ynXn
https://pastebin.com/BAmNnWPG
https://pastebin.com/KgFLHfXf
https://pastebin.com/LT7WpAkz
https://pastebin.com/F7bhcEZn
https://pastebin.com/Vt71iUie
https://pastebin.com/b6aTG0vH
https://pastebin.com/YkTNEfNW
https://pastebin.com/xZYNrFV9
https://pastebin.com/URiZmFBE
https://pastebin.com/31PwZST4
https://pastebin.com/9zzUgrh1
https://pastebin.com/t5GZ46L5
https://pastebin.com/jnqax73J
https://pastebin.com/s8ancsQ8
https://pastebin.com/RupTptFa
https://pastebin.com/iqVL98RE
https://pastebin.com/m540xPh3
https://pastebin.com/SGt4MpRD
https://pastebin.com/d4CT63kJ
https://pastebin.com/hhPTDEMT
https://pastebin.com/RHTCf9E2
https://pastebin.com/0T6WBFQs
https://pastebin.com/i1UChYJG
https://pastebin.com/m5EmezEN
https://pastebin.com/7da2hn5E
https://pastebin.com/RCSThm9K
https://pastebin.com/HMwehjXj
https://pastebin.com/5rYR3q2t
https://pastebin.com/2hBwYzin
https://pastebin.com/p7QyQegF
https://pastebin.com/9YchUWAp
https://pastebin.com/9QkWjZS8
https://pastebin.com/dKJcBeWU
https://pastebin.com/y2hUEn5k
https://pastebin.com/PjRCfHQV
https://pastebin.com/Zwvh6Gj6
https://pastebin.com/QQYxQzn7
https://pastebin.com/9TPRM0EL
https://pastebin.com/mAX55z1X
https://pastebin.com/NSCC7keU
https://pastebin.com/zxpEz8CT
https://pastebin.com/N4qU4GBi
https://pastebin.com/fMsMLean
https://pastebin.com/Xgq14P8Z
https://pastebin.com/zD7r5kSj
https://pastebin.com/MA8wHsQp
https://pastebin.com/Ww5Sedpx
https://pastebin.com/MH5DNyY1
https://pastebin.com/A8ZR80ix
https://pastebin.com/An6A0kcB
https://pastebin.com/xfZyEP3r
https://pastebin.com/mCRJJG5k
https://pastebin.com/i8pDjjTr
https://pastebin.com/x5EFGiqg
https://pastebin.com/hdGJGHDa
https://pastebin.com/XvLmLTda
https://pastebin.com/URSmHfMQ
https://pastebin.com/AfL6JvxE
https://pastebin.com/2XwNG2Gv
https://pastebin.com/yCggCwQs
https://pastebin.com/vtfpaBVx
https://pastebin.com/e5QbtBdu
https://pastebin.com/xBW2j2u7
https://pastebin.com/EM9mfHFE
https://pastebin.com/YdSsZfrd
https://pastebin.com/29t7hwPk
https://pastebin.com/AzL6dAAr
https://pastebin.com/9DjHEwu4
https://pastebin.com/zsG1FAQ5
https://pastebin.com/n3u3F4FS
https://pastebin.com/hGb4579u
https://pastebin.com/4iVXD2bm
https://pastebin.com/asamK1S5
https://pastebin.com/7bjibNp4
https://pastebin.com/KJaFD1nA
https://pastebin.com/CcD19MmF
https://pastebin.com/rFBHrupt
https://pastebin.com/Kf4zzEZ1
https://pastebin.com/p07Rr3Dg
https://pastebin.com/TzBYBTKd
https://pastebin.com/3mSdSwZc
https://pastebin.com/vD58SSEh
https://pastebin.com/yL5bYn4f
https://pastebin.com/NfsJ1BJa
https://pastebin.com/Dmf05JZi
https://pastebin.com/ZNAR7d19
https://pastebin.com/ni3NfQvW
https://pastebin.com/G7gt0EP1
https://pastebin.com/wej3w4Vi
https://pastebin.com/d602uf7W
https://pastebin.com/Y43ufxnM
https://pastebin.com/iCT3zSXx
https://pastebin.com/T3jA1SUw
https://pastebin.com/n4U1b4jm

继续阅读 »

问题现象
在文本量多而杂的场景下,单独给每个Text文本设置字体大小效率不高,有什么方法能够设置APP内的全局字体大小?以便统一设置字体大小,提高效率。

背景知识
动态属性是动态设置组件的属性,支持开发者在属性设置时使用if/else语法,且根据需要使用多态样式设置属性。其属性方法AttributeModifier支持在当前组件上动态设置属性方法。
Text文本组件中的fontSize属性可以设置字体大小,fontFamily属性可以设置字体列表。
接口ApplicationContext.setFontSizeScale设置应用字体大小缩放比例。仅支持主线程调用。当应用字体设置为跟随系统时,通过配置configuration标签就可以设置应用字体大小跟随系统变化的比例。
解决方案
方案一:通过preferences调节应用内全局字体大小。
自定义PreferencesUtil类,通过其提供的创建、保存和查询的数据,将读取到的数据保存到页面带有@State的变量中,通过状态变量对文本字体大小进行设置。具体应用可以参考官网使用preferences实现应用内字体大小调节功能。

方案二:通过动态属性设置全局字体大小。
使用动态属性,自定义class实现AttributeModifier接口,设定好Text需要的fontSize后在页面调用,实现字体大小统一修改。

class MyTextModifier implements AttributeModifier<TextAttribute> {
public isDark: boolean = false;

applyNormalAttribute(instance: TextAttribute): void {
if (this.isDark) {
instance.fontSize(100);
} else {
instance.fontSize(50);
}
}
}

@Entry
@Component
struct Index {
private message: string = 'test';
@State modifier: MyTextModifier = new MyTextModifier();

build() {
Column() {
Text(this.message)
.attributeModifier(this.modifier)
.onClick(() => {
this.modifier.isDark = !this.modifier.isDark;
});
Blank();
Text(this.message)
.attributeModifier(this.modifier)
.onClick(() => {
this.modifier.isDark = !this.modifier.isDark;
});
}
.padding(24)
.width('100%')
.height('100%');
}
}
https://pastebin.com/zv1bEjfh
https://pastebin.com/Z7CHKjjW
https://pastebin.com/73NZB1fg
https://pastebin.com/zb96CYYT
https://pastebin.com/TVSbCuk0
https://pastebin.com/PQH1YKrR
https://pastebin.com/bv5qqT8j
https://pastebin.com/WpenkS9J
https://pastebin.com/jkgzXhCX
https://pastebin.com/pT7xkBGP
https://pastebin.com/ppyQuy1c
https://pastebin.com/LdT3rmMu
https://pastebin.com/EVTt0G5t
https://pastebin.com/Lv4a1muV
https://pastebin.com/zmTAWL2U
https://pastebin.com/QdxecLbK
https://pastebin.com/3kZ5NwrU
https://pastebin.com/TPJsBatd
https://pastebin.com/WfhnNpFV
https://pastebin.com/SAmdt79t
https://pastebin.com/JZ4KvEWL
https://pastebin.com/uGcyWALB
https://pastebin.com/MEq4JbqR
https://pastebin.com/3ucqcbc6
https://pastebin.com/3cDtaAwF
https://pastebin.com/yzn2GGYf
https://pastebin.com/RTjPyJNX
https://pastebin.com/SQDC9M1E
https://pastebin.com/xcasG7xf
https://pastebin.com/zZfPyQY3
https://pastebin.com/RNzWpA4q
https://pastebin.com/8pufepjf
https://pastebin.com/vxDSuXem
https://pastebin.com/HP4y0h1f
https://pastebin.com/46jYNt7j
https://pastebin.com/YUvcKeAw
https://pastebin.com/wGfKDBZe
https://pastebin.com/bccZqgn7
https://pastebin.com/cBisnNN3
https://pastebin.com/4WFqkrmi
https://pastebin.com/fc7jp78E
https://pastebin.com/yjptCxY9
https://pastebin.com/2D6R3N5s
https://pastebin.com/KvR4cDki
https://pastebin.com/Vk1Rk7uj
https://pastebin.com/JEiNNYpi
https://pastebin.com/PyzV38G0
https://pastebin.com/KbzwD20r
https://pastebin.com/ViKS1JgQ
https://pastebin.com/5YcYwqDE
https://pastebin.com/ZFMU4ndk
https://pastebin.com/0Ex2wTma
https://pastebin.com/pQ7MD6DZ
https://pastebin.com/UCTHHnqH
https://pastebin.com/sDEyLgsy
https://pastebin.com/Z7Wrv3qq
https://pastebin.com/qb5YncFh
https://pastebin.com/uibzH23E
https://pastebin.com/4ykQaXqk
https://pastebin.com/K5mKVf1G
https://pastebin.com/xYEugHiP
https://pastebin.com/z8JzmxYY
https://pastebin.com/0UXR57Di
https://pastebin.com/0hmA61Hd
https://pastebin.com/tPkKjDC1
https://pastebin.com/v0ra9Mya
https://pastebin.com/puHjxuHP
https://pastebin.com/fYS5Dnw5
https://pastebin.com/xDwmcBVp
https://pastebin.com/vYi6rTmN
https://pastebin.com/yx39A9W3
https://pastebin.com/YjGpgumr
https://pastebin.com/Yr3NDGsw
https://pastebin.com/mHQDdmYW
https://pastebin.com/zQj53Zez
https://pastebin.com/BPjewhxX
https://pastebin.com/zQ0vrSFY
https://pastebin.com/1w62VYp5
https://pastebin.com/h4KEm2mW
https://pastebin.com/fTskMDFx
https://pastebin.com/FmNtGTnb
https://pastebin.com/16dZdmr6
https://pastebin.com/GDKtKnBU
https://pastebin.com/s1CTn9wk
https://pastebin.com/HWayJh7D
https://pastebin.com/sbNvhpjd
https://pastebin.com/8QS7hR6z
https://pastebin.com/BNmr0siT
https://pastebin.com/wSeQ93jQ
https://pastebin.com/mWDHpM97
https://pastebin.com/n95D4DU9
https://pastebin.com/WwyN4MSy
https://pastebin.com/Yy5piny4
https://pastebin.com/M5eG7d97
https://pastebin.com/tecUdChP
https://pastebin.com/YizPCgVe
https://pastebin.com/k2QgxpVx
https://pastebin.com/L874Auw2
https://pastebin.com/i7xaQUHV
https://pastebin.com/6RYNSaMD
https://pastebin.com/EHGryvUF
https://pastebin.com/mBy1dH2W
https://pastebin.com/4Rv7wPLE
https://pastebin.com/
https://pastebin.com/sc89ynXn
https://pastebin.com/BAmNnWPG
https://pastebin.com/KgFLHfXf
https://pastebin.com/LT7WpAkz
https://pastebin.com/F7bhcEZn
https://pastebin.com/Vt71iUie
https://pastebin.com/b6aTG0vH
https://pastebin.com/YkTNEfNW
https://pastebin.com/xZYNrFV9
https://pastebin.com/URiZmFBE
https://pastebin.com/31PwZST4
https://pastebin.com/9zzUgrh1
https://pastebin.com/t5GZ46L5
https://pastebin.com/jnqax73J
https://pastebin.com/s8ancsQ8
https://pastebin.com/RupTptFa
https://pastebin.com/iqVL98RE
https://pastebin.com/m540xPh3
https://pastebin.com/SGt4MpRD
https://pastebin.com/d4CT63kJ
https://pastebin.com/hhPTDEMT
https://pastebin.com/RHTCf9E2
https://pastebin.com/0T6WBFQs
https://pastebin.com/i1UChYJG
https://pastebin.com/m5EmezEN
https://pastebin.com/7da2hn5E
https://pastebin.com/RCSThm9K
https://pastebin.com/HMwehjXj
https://pastebin.com/5rYR3q2t
https://pastebin.com/2hBwYzin
https://pastebin.com/p7QyQegF
https://pastebin.com/9YchUWAp
https://pastebin.com/9QkWjZS8
https://pastebin.com/dKJcBeWU
https://pastebin.com/y2hUEn5k
https://pastebin.com/PjRCfHQV
https://pastebin.com/Zwvh6Gj6
https://pastebin.com/QQYxQzn7
https://pastebin.com/9TPRM0EL
https://pastebin.com/mAX55z1X
https://pastebin.com/NSCC7keU
https://pastebin.com/zxpEz8CT
https://pastebin.com/N4qU4GBi
https://pastebin.com/fMsMLean
https://pastebin.com/Xgq14P8Z
https://pastebin.com/zD7r5kSj
https://pastebin.com/MA8wHsQp
https://pastebin.com/Ww5Sedpx
https://pastebin.com/MH5DNyY1
https://pastebin.com/A8ZR80ix
https://pastebin.com/An6A0kcB
https://pastebin.com/xfZyEP3r
https://pastebin.com/mCRJJG5k
https://pastebin.com/i8pDjjTr
https://pastebin.com/x5EFGiqg
https://pastebin.com/hdGJGHDa
https://pastebin.com/XvLmLTda
https://pastebin.com/URSmHfMQ
https://pastebin.com/AfL6JvxE
https://pastebin.com/2XwNG2Gv
https://pastebin.com/yCggCwQs
https://pastebin.com/vtfpaBVx
https://pastebin.com/e5QbtBdu
https://pastebin.com/xBW2j2u7
https://pastebin.com/EM9mfHFE
https://pastebin.com/YdSsZfrd
https://pastebin.com/29t7hwPk
https://pastebin.com/AzL6dAAr
https://pastebin.com/9DjHEwu4
https://pastebin.com/zsG1FAQ5
https://pastebin.com/n3u3F4FS
https://pastebin.com/hGb4579u
https://pastebin.com/4iVXD2bm
https://pastebin.com/asamK1S5
https://pastebin.com/7bjibNp4
https://pastebin.com/KJaFD1nA
https://pastebin.com/CcD19MmF
https://pastebin.com/rFBHrupt
https://pastebin.com/Kf4zzEZ1
https://pastebin.com/p07Rr3Dg
https://pastebin.com/TzBYBTKd
https://pastebin.com/3mSdSwZc
https://pastebin.com/vD58SSEh
https://pastebin.com/yL5bYn4f
https://pastebin.com/NfsJ1BJa
https://pastebin.com/Dmf05JZi
https://pastebin.com/ZNAR7d19
https://pastebin.com/ni3NfQvW
https://pastebin.com/G7gt0EP1
https://pastebin.com/wej3w4Vi
https://pastebin.com/d602uf7W
https://pastebin.com/Y43ufxnM
https://pastebin.com/iCT3zSXx
https://pastebin.com/T3jA1SUw
https://pastebin.com/n4U1b4jm

收起阅读 »

如何混用Navigation和router实现路由导航

问题现象
如何实现Navigation和router的混用?

背景知识
router:提供通过不同的url访问不同的页面,包括跳转到应用内的指定页面、同应用内的某个页面替换当前页面、返回上一页面或指定的页面等。
Navigation:用于实现Navigation页面(NavDestination)间的跳转,支持在不同Navigation页面间传递参数,提供灵活的跳转栈操作,从而更便捷地实现对不同页面的访问和复用。Navigation是路由导航的根视图容器,一般作为页面(@Entry)的根容器。
解决方案
对于router跳转到的页面需要使用Navigation作为根容器,才能在这个页面跳转到下个NavDestination页面。这是因为router跳转的是page页面,而NavDestination是Navigation的子组件,二者层次不同。以下为Navigation和router混用的三种常见场景。

场景一
Navigation页面与router页面间的跳转,如:入口页面->NavPageOne->RouterPageOne->NavPageTwo。该混用场景常见于“全局导航 局部导航”的页面设计,例如首页到隐私模块页面等。

使用router跳转到RouterPageOne,RouterPageOne使用Navigation作为根容器跳转到NavPageTwo,这里RouterPageOne的Navigation和第一个Navigation相互独立,都有各自的路由栈,互不影响。开发者需参考系统路由表配置Navigation路由,配置说明附在本文末尾。

入口页面代码如下:需在resources/base/profile/main_pages.json配置,参考pages标签。

https://pastebin.com/T0qjEdhR
https://pastebin.com/9j2xhYmA
https://pastebin.com/y3qDY8zJ
https://pastebin.com/ACGMG4Ja
https://pastebin.com/hMkaAgnr
https://pastebin.com/DKCau8pY
https://pastebin.com/KMR7ahzA
https://pastebin.com/tJvRKc4N
https://pastebin.com/NVEwG9uZ
https://pastebin.com/EPxLpA6i
https://pastebin.com/FK8MaSeV
https://pastebin.com/CytN6Qcs
https://pastebin.com/q7ugna3X
https://pastebin.com/EjiwDGkT
https://pastebin.com/nsPUWMri
https://pastebin.com/SbiDFTm9
https://pastebin.com/mNrgbF0F
https://pastebin.com/x6eZ1ygU
https://pastebin.com/PBL5tVYf
https://pastebin.com/jX1mX3T0
https://pastebin.com/WXYZUzhC
https://pastebin.com/UDyfqTN0
https://pastebin.com/wXk3dYJG
https://pastebin.com/dSzW4S5n
https://pastebin.com/iud6XZSS
https://pastebin.com/scHYNFMf
https://pastebin.com/AeHxaU7w
https://pastebin.com/H7Au1Apz
https://pastebin.com/DRCNjV3v
https://pastebin.com/7gv7ubWE
https://pastebin.com/SZdUViky
https://pastebin.com/cp63TTTg
https://pastebin.com/fzCVAvCF
https://pastebin.com/jJ4Tgfcm
https://pastebin.com/gKUBHbAx
https://pastebin.com/SHxpbQus
https://pastebin.com/PUgXw4SZ
https://pastebin.com/kQudDe6v
https://pastebin.com/Q8kzX5QG
https://pastebin.com/gJTuU53X
https://pastebin.com/tgUM3kmm
https://pastebin.com/XSzcmndG
https://pastebin.com/STYGr8HQ
https://pastebin.com/Cke4tPN7
https://pastebin.com/G9vGA4VD
https://pastebin.com/9Qdn0wFX
https://pastebin.com/fNK8TZBi
https://pastebin.com/BaX3LH8U
https://pastebin.com/ZZQcNB1N
https://pastebin.com/X9RbKjBw
https://pastebin.com/KAJYpJte
https://pastebin.com/vnKJfsX4
https://pastebin.com/Kd1Xm439
https://pastebin.com/VEBbiMGW
https://pastebin.com/asWsvVUg
https://pastebin.com/bADNrv39
https://pastebin.com/dbE231R1
https://pastebin.com/urCZ7b7n
https://pastebin.com/rJUkQLTy
https://pastebin.com/0WJW2iZm
https://pastebin.com/MYR6YbuM
https://pastebin.com/FvqPxU7T
https://pastebin.com/RHgL2GWD
https://pastebin.com/zfUdLzmn
https://pastebin.com/3RiMytue
https://pastebin.com/8Q0gji6p
https://pastebin.com/bURMaJ6s
https://pastebin.com/vSEEbx6q
https://pastebin.com/sxF2ewtt
https://pastebin.com/qS8u7xGj
https://pastebin.com/Pi4zhEac
https://pastebin.com/3BWfDUkr
https://pastebin.com/Mfvfq5a1
https://pastebin.com/8GucH56m
https://pastebin.com/3g8rK644
https://pastebin.com/86tms6GZ
https://pastebin.com/6PeE5NJ9
https://pastebin.com/zQZMR3uQ
https://pastebin.com/ZzKRebtY
https://pastebin.com/RXSvMK0S
https://pastebin.com/EJkW2AzU
https://pastebin.com/HV1WwkJr
https://pastebin.com/3bj7RrVR
https://pastebin.com/5CgX4SEE
https://pastebin.com/z8MPVtnX
https://pastebin.com/UX0Am16Z
https://pastebin.com/SNgYcfe9
https://pastebin.com/5qiLcbAd
https://pastebin.com/XZcpNxKU
https://pastebin.com/g1eR9CPP
https://pastebin.com/uJeVWMAd
https://pastebin.com/gRjHa4ex
https://pastebin.com/EBarihNi
https://pastebin.com/sMg2cGSe
https://pastebin.com/Z8MPPgLr
https://pastebin.com/LyUNjkvn
https://pastebin.com/S3eeuU8M
https://pastebin.com/e1bYnW5j
https://pastebin.com/QYdf4Mv9
https://pastebin.com/mQJQHVzW
https://pastebin.com/andd0da6
https://pastebin.com/PeTHqrxq
https://pastebin.com/P6gk0Tj9
https://pastebin.com/QQ2dxGdL
https://pastebin.com/E2ibKkNu
https://pastebin.com/YC0sK7jB
https://pastebin.com/1EYYscyi
https://pastebin.com/FRXXxWwg
https://pastebin.com/ZXXi9xM1
https://pastebin.com/0izhXiFJ
https://pastebin.com/3sPJWA9h
https://pastebin.com/C9s6zMRc
https://pastebin.com/92djJXhJ
https://pastebin.com/rxLq7fK7
https://pastebin.com/1jjxq2y7
https://pastebin.com/RQuravmU
https://pastebin.com/0HC8tnCM
https://pastebin.com/qV828LM2
https://pastebin.com/KsTnZQKK
https://pastebin.com/0DGQvkf5
https://pastebin.com/ZpSpZ1ad
https://pastebin.com/RyCxRXXc
https://pastebin.com/FNT47tiG
https://pastebin.com/M9kRCjFZ
https://pastebin.com/5FYBqVba
https://pastebin.com/tc3AxKPP
https://pastebin.com/cmEzD2cm
https://pastebin.com/G8epzgNn
https://pastebin.com/DvkkCE48
https://pastebin.com/qQn5nr1T
https://pastebin.com/LdRyg3fJ
https://pastebin.com/bhMmk2QE
https://pastebin.com/Ezp4M2mU
https://pastebin.com/pgc1FurG
https://pastebin.com/Ct29GCzi
https://pastebin.com/X2SibK2k
https://pastebin.com/cPyP1sGv
https://pastebin.com/BpRi9nQ3
https://pastebin.com/PuEQk2D5
https://pastebin.com/LqQtd4xC
https://pastebin.com/0m9SGErQ
https://pastebin.com/2TjekbUJ
https://pastebin.com/LCfheMsR
https://pastebin.com/KBGaUPqA
https://pastebin.com/adQ498ic
https://pastebin.com/0wuucsZ0
https://pastebin.com/5p9vtftU
https://pastebin.com/NBdsXhQi
https://pastebin.com/N1rgsNYD
https://pastebin.com/pNyDCENQ
https://pastebin.com/9cDP15GL
https://pastebin.com/F2a621ab
https://pastebin.com/aJ9PzUyf
https://pastebin.com/P5UjJuY1
https://pastebin.com/Sn9J5rLr
https://pastebin.com/3rQRmumG
https://pastebin.com/QNSSbDRg
https://pastebin.com/csLrWKhY
https://pastebin.com/Ceg1c07i
https://pastebin.com/hwKtUzVf
https://pastebin.com/WzAyiC5N
https://pastebin.com/qDteic1q
https://pastebin.com/tfYq4WsV
https://pastebin.com/bRqVufy3
https://pastebin.com/93ex9FyT
https://pastebin.com/stpFZB0f
https://pastebin.com/GAm5Qri7
https://pastebin.com/a5xG0wd1
https://pastebin.com/2J1Hiqvm
https://pastebin.com/gh7CZTcv
https://pastebin.com/XLdTknfz
https://pastebin.com/CUjaXXKR
https://pastebin.com/RHVccDjS
https://pastebin.com/Fyc2a9PC
https://pastebin.com/Y7QzDaEQ
https://pastebin.com/30AHcs66
https://pastebin.com/76dUwnrz
https://pastebin.com/Eefce3y4
https://pastebin.com/rgUGwQR4
https://pastebin.com/b1wjhncJ
https://pastebin.com/ReNE2D36
https://pastebin.com/vyJXbMcD
https://pastebin.com/vYKvCKch
https://pastebin.com/XfHEyEgJ
https://pastebin.com/v8zRpCdK
https://pastebin.com/fFVAe7NL
https://pastebin.com/USryqJTr
https://pastebin.com/yAc9niyy
https://pastebin.com/nkJB8XRC
https://pastebin.com/PSqZGpwq
https://pastebin.com/ZD0VWb9t
https://pastebin.com/5YsLCMSB
https://pastebin.com/yXkvdiH1
https://pastebin.com/4YzAMWHC
https://pastebin.com/QaVh0Srp
https://pastebin.com/d9Yjsr9D
https://pastebin.com/4rKTisyH
https://pastebin.com/jGe97xbT
https://pastebin.com/KCFPzysq
https://pastebin.com/JXVdBeaz

继续阅读 »

问题现象
如何实现Navigation和router的混用?

背景知识
router:提供通过不同的url访问不同的页面,包括跳转到应用内的指定页面、同应用内的某个页面替换当前页面、返回上一页面或指定的页面等。
Navigation:用于实现Navigation页面(NavDestination)间的跳转,支持在不同Navigation页面间传递参数,提供灵活的跳转栈操作,从而更便捷地实现对不同页面的访问和复用。Navigation是路由导航的根视图容器,一般作为页面(@Entry)的根容器。
解决方案
对于router跳转到的页面需要使用Navigation作为根容器,才能在这个页面跳转到下个NavDestination页面。这是因为router跳转的是page页面,而NavDestination是Navigation的子组件,二者层次不同。以下为Navigation和router混用的三种常见场景。

场景一
Navigation页面与router页面间的跳转,如:入口页面->NavPageOne->RouterPageOne->NavPageTwo。该混用场景常见于“全局导航 局部导航”的页面设计,例如首页到隐私模块页面等。

使用router跳转到RouterPageOne,RouterPageOne使用Navigation作为根容器跳转到NavPageTwo,这里RouterPageOne的Navigation和第一个Navigation相互独立,都有各自的路由栈,互不影响。开发者需参考系统路由表配置Navigation路由,配置说明附在本文末尾。

入口页面代码如下:需在resources/base/profile/main_pages.json配置,参考pages标签。

https://pastebin.com/T0qjEdhR
https://pastebin.com/9j2xhYmA
https://pastebin.com/y3qDY8zJ
https://pastebin.com/ACGMG4Ja
https://pastebin.com/hMkaAgnr
https://pastebin.com/DKCau8pY
https://pastebin.com/KMR7ahzA
https://pastebin.com/tJvRKc4N
https://pastebin.com/NVEwG9uZ
https://pastebin.com/EPxLpA6i
https://pastebin.com/FK8MaSeV
https://pastebin.com/CytN6Qcs
https://pastebin.com/q7ugna3X
https://pastebin.com/EjiwDGkT
https://pastebin.com/nsPUWMri
https://pastebin.com/SbiDFTm9
https://pastebin.com/mNrgbF0F
https://pastebin.com/x6eZ1ygU
https://pastebin.com/PBL5tVYf
https://pastebin.com/jX1mX3T0
https://pastebin.com/WXYZUzhC
https://pastebin.com/UDyfqTN0
https://pastebin.com/wXk3dYJG
https://pastebin.com/dSzW4S5n
https://pastebin.com/iud6XZSS
https://pastebin.com/scHYNFMf
https://pastebin.com/AeHxaU7w
https://pastebin.com/H7Au1Apz
https://pastebin.com/DRCNjV3v
https://pastebin.com/7gv7ubWE
https://pastebin.com/SZdUViky
https://pastebin.com/cp63TTTg
https://pastebin.com/fzCVAvCF
https://pastebin.com/jJ4Tgfcm
https://pastebin.com/gKUBHbAx
https://pastebin.com/SHxpbQus
https://pastebin.com/PUgXw4SZ
https://pastebin.com/kQudDe6v
https://pastebin.com/Q8kzX5QG
https://pastebin.com/gJTuU53X
https://pastebin.com/tgUM3kmm
https://pastebin.com/XSzcmndG
https://pastebin.com/STYGr8HQ
https://pastebin.com/Cke4tPN7
https://pastebin.com/G9vGA4VD
https://pastebin.com/9Qdn0wFX
https://pastebin.com/fNK8TZBi
https://pastebin.com/BaX3LH8U
https://pastebin.com/ZZQcNB1N
https://pastebin.com/X9RbKjBw
https://pastebin.com/KAJYpJte
https://pastebin.com/vnKJfsX4
https://pastebin.com/Kd1Xm439
https://pastebin.com/VEBbiMGW
https://pastebin.com/asWsvVUg
https://pastebin.com/bADNrv39
https://pastebin.com/dbE231R1
https://pastebin.com/urCZ7b7n
https://pastebin.com/rJUkQLTy
https://pastebin.com/0WJW2iZm
https://pastebin.com/MYR6YbuM
https://pastebin.com/FvqPxU7T
https://pastebin.com/RHgL2GWD
https://pastebin.com/zfUdLzmn
https://pastebin.com/3RiMytue
https://pastebin.com/8Q0gji6p
https://pastebin.com/bURMaJ6s
https://pastebin.com/vSEEbx6q
https://pastebin.com/sxF2ewtt
https://pastebin.com/qS8u7xGj
https://pastebin.com/Pi4zhEac
https://pastebin.com/3BWfDUkr
https://pastebin.com/Mfvfq5a1
https://pastebin.com/8GucH56m
https://pastebin.com/3g8rK644
https://pastebin.com/86tms6GZ
https://pastebin.com/6PeE5NJ9
https://pastebin.com/zQZMR3uQ
https://pastebin.com/ZzKRebtY
https://pastebin.com/RXSvMK0S
https://pastebin.com/EJkW2AzU
https://pastebin.com/HV1WwkJr
https://pastebin.com/3bj7RrVR
https://pastebin.com/5CgX4SEE
https://pastebin.com/z8MPVtnX
https://pastebin.com/UX0Am16Z
https://pastebin.com/SNgYcfe9
https://pastebin.com/5qiLcbAd
https://pastebin.com/XZcpNxKU
https://pastebin.com/g1eR9CPP
https://pastebin.com/uJeVWMAd
https://pastebin.com/gRjHa4ex
https://pastebin.com/EBarihNi
https://pastebin.com/sMg2cGSe
https://pastebin.com/Z8MPPgLr
https://pastebin.com/LyUNjkvn
https://pastebin.com/S3eeuU8M
https://pastebin.com/e1bYnW5j
https://pastebin.com/QYdf4Mv9
https://pastebin.com/mQJQHVzW
https://pastebin.com/andd0da6
https://pastebin.com/PeTHqrxq
https://pastebin.com/P6gk0Tj9
https://pastebin.com/QQ2dxGdL
https://pastebin.com/E2ibKkNu
https://pastebin.com/YC0sK7jB
https://pastebin.com/1EYYscyi
https://pastebin.com/FRXXxWwg
https://pastebin.com/ZXXi9xM1
https://pastebin.com/0izhXiFJ
https://pastebin.com/3sPJWA9h
https://pastebin.com/C9s6zMRc
https://pastebin.com/92djJXhJ
https://pastebin.com/rxLq7fK7
https://pastebin.com/1jjxq2y7
https://pastebin.com/RQuravmU
https://pastebin.com/0HC8tnCM
https://pastebin.com/qV828LM2
https://pastebin.com/KsTnZQKK
https://pastebin.com/0DGQvkf5
https://pastebin.com/ZpSpZ1ad
https://pastebin.com/RyCxRXXc
https://pastebin.com/FNT47tiG
https://pastebin.com/M9kRCjFZ
https://pastebin.com/5FYBqVba
https://pastebin.com/tc3AxKPP
https://pastebin.com/cmEzD2cm
https://pastebin.com/G8epzgNn
https://pastebin.com/DvkkCE48
https://pastebin.com/qQn5nr1T
https://pastebin.com/LdRyg3fJ
https://pastebin.com/bhMmk2QE
https://pastebin.com/Ezp4M2mU
https://pastebin.com/pgc1FurG
https://pastebin.com/Ct29GCzi
https://pastebin.com/X2SibK2k
https://pastebin.com/cPyP1sGv
https://pastebin.com/BpRi9nQ3
https://pastebin.com/PuEQk2D5
https://pastebin.com/LqQtd4xC
https://pastebin.com/0m9SGErQ
https://pastebin.com/2TjekbUJ
https://pastebin.com/LCfheMsR
https://pastebin.com/KBGaUPqA
https://pastebin.com/adQ498ic
https://pastebin.com/0wuucsZ0
https://pastebin.com/5p9vtftU
https://pastebin.com/NBdsXhQi
https://pastebin.com/N1rgsNYD
https://pastebin.com/pNyDCENQ
https://pastebin.com/9cDP15GL
https://pastebin.com/F2a621ab
https://pastebin.com/aJ9PzUyf
https://pastebin.com/P5UjJuY1
https://pastebin.com/Sn9J5rLr
https://pastebin.com/3rQRmumG
https://pastebin.com/QNSSbDRg
https://pastebin.com/csLrWKhY
https://pastebin.com/Ceg1c07i
https://pastebin.com/hwKtUzVf
https://pastebin.com/WzAyiC5N
https://pastebin.com/qDteic1q
https://pastebin.com/tfYq4WsV
https://pastebin.com/bRqVufy3
https://pastebin.com/93ex9FyT
https://pastebin.com/stpFZB0f
https://pastebin.com/GAm5Qri7
https://pastebin.com/a5xG0wd1
https://pastebin.com/2J1Hiqvm
https://pastebin.com/gh7CZTcv
https://pastebin.com/XLdTknfz
https://pastebin.com/CUjaXXKR
https://pastebin.com/RHVccDjS
https://pastebin.com/Fyc2a9PC
https://pastebin.com/Y7QzDaEQ
https://pastebin.com/30AHcs66
https://pastebin.com/76dUwnrz
https://pastebin.com/Eefce3y4
https://pastebin.com/rgUGwQR4
https://pastebin.com/b1wjhncJ
https://pastebin.com/ReNE2D36
https://pastebin.com/vyJXbMcD
https://pastebin.com/vYKvCKch
https://pastebin.com/XfHEyEgJ
https://pastebin.com/v8zRpCdK
https://pastebin.com/fFVAe7NL
https://pastebin.com/USryqJTr
https://pastebin.com/yAc9niyy
https://pastebin.com/nkJB8XRC
https://pastebin.com/PSqZGpwq
https://pastebin.com/ZD0VWb9t
https://pastebin.com/5YsLCMSB
https://pastebin.com/yXkvdiH1
https://pastebin.com/4YzAMWHC
https://pastebin.com/QaVh0Srp
https://pastebin.com/d9Yjsr9D
https://pastebin.com/4rKTisyH
https://pastebin.com/jGe97xbT
https://pastebin.com/KCFPzysq
https://pastebin.com/JXVdBeaz

收起阅读 »

云打包次数限制,除了账号次数限制,还有电脑限制 吃相也太难看了

云端打包发布常见问题

吃相也太难看了!
账号次数限制 ok 我承认我今天打包次数很多 但是 测试插件兼容性就是有问题要一直测啊
特意注册了一个新账号测试插件功能
结果又说本电脑打包太多次了,那就一开始就提示本电脑打包太多次了啊
测试插件有问题就是要调试很多次啊
我也不是恶意的浪费资源
真的很生气 操作半天还是不行
就是让花钱打包 一开始就说清楚啊

继续阅读 »

吃相也太难看了!
账号次数限制 ok 我承认我今天打包次数很多 但是 测试插件兼容性就是有问题要一直测啊
特意注册了一个新账号测试插件功能
结果又说本电脑打包太多次了,那就一开始就提示本电脑打包太多次了啊
测试插件有问题就是要调试很多次啊
我也不是恶意的浪费资源
真的很生气 操作半天还是不行
就是让花钱打包 一开始就说清楚啊

收起阅读 »

Uni-App iOS 上架全流程|Windows(Win7/10/11)免 Mac 制作 P12 证书 + 描述文件 + IPA 上传完整教程

ipa Appstore上传 iOS打包 Apple证书 iOS证书

前言
做 Uni-App 开发的团队大多以 Windows 电脑为主,传统 iOS 上架必须依赖 Mac 电脑,通过钥匙串生成 CSR、制作 P12 发布证书、创建 mobileprovision 描述文件,再用 Xcode/Transporter 上传 IPA,硬件成本高、多账号极易触发苹果 3.2 (f) 关联风控批量封号。
很多中小团队没有 Mac 设备,虚拟机隔离又存在底层设备指纹泄露、卡顿超时、隐性账号关联等致命缺陷;而iOSUploader完美解决痛点,全 Windows 兼容(Win7/8/10/11),仅 45.2MB 轻量化工具,
无需 Mac、无需虚拟机,一站式完成 Bundle ID 创建、P12 证书生成、描述文件制作、HBuilderX 云打包 IPA 分片上传、App Store 后台元数据管理,同时内置独立隔离环境,规避苹果多账号关联封号风险。

官网地址:https://iosuploader.xinxishehui.com/

核心优势:
全 Windows 兼容,最低支持 Win7 老旧办公电脑;
纯软件隔离,斩断设备 / 网络指纹,规避 3.2 (f) 批量封号;
全程不用 Apple ID 密码,仅 P8 密钥 API 授权,杜绝账号泄露;
一站式证书、Bundle ID、设备 UDID、描述文件管理;
直接上传 IPA 至 App Store Connect,替代 Xcode、Transporter;
批量管理多开发者账号,适配 UniApp、Flutter 跨平台项目。

**一、前期准备工作

  1. 基础环境**
    Windows 系统:Win7/Win8/Win10/Win11 32/64 位均可;
    下载 iOSUploader v2.1.3,大小 45.2MB,解压直接运行无需安装;
    有效苹果开发者付费账号(个人 / 企业账号,免费账号无法上架 App Store);
    Uni-App 项目(HBuilderX 开发完成,manifest.json 提前规划 Bundle ID);
    提前获取 App Store Connect API 三要素:Issuer ID、Key ID、P8 密钥文件(全程免账号密码登录)。
  2. 提前获取 P8 密钥(关键,免 Apple ID 登录)
    登录 App Store Connect → 用户和访问 → API 密钥;
    点击「+」新建密钥,命名自定义,权限选 App 管理员;
    生成后仅一次下载 AuthKey_xxx.p8 文件,妥善保存;
    复制页面上方 Issuer ID、列表内 Key ID,填入 iOSUploader 设置面板;
    优势:不用输入 Apple ID 与登录密码,多人协作不会泄露账号,大幅降低 3.2 (f) 违规关联风险。

二、Windows 端用 iOSUploader 创建 Bundle ID(应用唯一包名)
Bundle ID 是 UniApp iOS 应用唯一标识,证书、描述文件、打包必须保持完全一致,传统操作需登录苹果开发者网页,iOSUploader 内置可视化创建面板:
打开 iOSUploader,左侧菜单栏切换「Bundle ID 管理」;
点击「创建 Bundle」,填写名称、自定义包名(格式:com. 公司名。项目名,例:com.xxx.uniappshop);
按需勾选 App 权限服务:推送通知、Apple 登录、iCloud、支付、NFC、Game Center 等 UniApp 所需能力;
确认创建,工具自动同步至苹果开发者后台,列表可查看、管理所有 Bundle ID;
复制 Bundle ID,保存至 HBuilderX,后续打包统一填写。

三、Windows 无 Mac 生成 P12 发布证书(打包必备签名文件)
传统 Mac 流程:钥匙串生成 CSR 证书签名请求→开发者后台创建证书→导出 P12,Windows 无钥匙串无法操作,iOSUploader 内置证书生成引擎,一步导出.p12 文件:
步骤 1:进入证书管理面板
左侧菜单「证书管理」→「创建证书」,选择证书类型:
iOS App Development:真机测试、TestFlight 内测;
iOS Distribution(App Store):正式上架打包,本文上架选此项。
步骤 2:生成并导出 P12 文件
填写证书名称,设置 P12 加密密码(打包时必须填写,牢记);
工具自动生成 CSR 并提交苹果服务器,无需手动操作;
创建成功后,本地导出.p12证书文件,单独存放;
工具列表可加载、查看所有证书过期时间,支持批量管理多账号证书;
注意:单个开发者账号最多 3 个发布证书,旧证书无用可直接在工具内删除释放名额。

四、Windows 制作.mobileprovision 描述文件
描述文件绑定 Bundle ID+P12 证书,是 UniApp 云打包签名核心文件,分开发 / 发布两类:
iOSUploader 左侧「描述文件管理」→「创建描述文件」;
类型选择:App Store(发布上架);
选择上一步创建的 Bundle ID,勾选刚生成的 Distribution 发布证书;
自定义描述文件名称,确认生成;
下载.mobileprovision描述文件保存本地;
开发测试版额外勾选设备 UDID,可在工具「设备管理」批量录入测试机 UDID。

五、HBuilderX Uni-App 云打包 IPA(Windows 全程操作)

无需 Mac 本地编译,DCloud 云打包直接产出 IPA 安装包:
HBuilderX 打开 UniApp 项目,顶部菜单:发行 → 原生 App - 云打包 → iOS;
打包参数配置:
应用包名(Bundle ID):与 iOSUploader 创建的包名完全一致;
版本号、build 内部版本号按需填写;
证书选择「自有证书」,上传 Windows 导出的.p12文件,输入 P12 加密密码;
上传对应.mobileprovision描述文件;
勾选应用图标、启动图,确认打包;
等待云端编译完成,下载生成的.ipa安装包到 Windows 本地。

六、iOSUploader Windows 上传 IPA 至 App Store Connect(免 Mac 上传)
摒弃 Xcode、Transporter 仅 Mac 可用限制,单台 Win7 电脑即可分片上传 IPA,自带防关联隔离通道:
打开 iOSUploader「上传管理」,顶部设置填入提前准备的 Issuer ID、Key ID、P8 证书路径,保存 API 授权;
点击「选择 IPA」,选中 HBuilderX 下载的 ipa 文件;
工具自动分片上传(超大文件分块传输,断点续传),实时显示上传日志;
上传完成自动创建 App Store 构建版本,无需登录网页后台;
配套功能:
截图管理:批量上传各尺寸 iPhone/iPad 截图,支持多语言;
应用元数据编辑:简介、关键词、销售地区、价格、年龄分级;
审核消息中心:查看苹果官方留言、回复审核问题、管理附件;
批量管理多应用、多账号切换,每个窗口独立隔离环境,杜绝账号关联。

七、关键:规避苹果 3.2 (f) 多账号关联封号(iOSUploader 核心价值)
大量 UniApp 多项目团队踩坑:同一台电脑、同一网络操作多个苹果开发者账号,被苹果风控判定环境关联,触发 3.2 (f) 条款连锁封号,所有账号应用下架、收益冻结、申诉成功率极低。
传统方案短板对比
表格
方案 成本 风控风险 Windows 适配
多台 Mac 物理隔离 极高,设备折旧运维贵 共用网络仍存在关联风险 不支持
Windows 虚拟机 高,占用大量内存硬盘 底层设备标识泄露,批量封号频发 卡顿、上传超时
iOSUploader 纯软件隔离 极低,单台电脑管理上百账号 独立隔离环境,无硬件指纹交叉 Win7 全兼容
工具防关联机制
独立隔离上传通道,不携带本机硬件、网卡、系统缓存信息;
多开工具窗口,每个账号独立运行环境,数据完全隔离;
API P8 密钥授权,全程不登录 Apple ID,消除账号登录轨迹关联;
上传、证书、Bundle ID 操作无统一设备指纹留痕,规避风控追溯链路。

九、常见报错排查(Windows 免 Mac 流程高频问题)
云打包签名失败:P12 密码错误、Bundle ID 与描述文件不匹配、证书过期;
IPA 上传失败:P8 密钥失效(重新生成下载)、网络波动(工具支持分片续传);
账号关联标记:停止共用虚拟机 / 旧上传工具,切换 iOSUploader 独立隔离窗口操作;
Win7 运行异常:关闭系统防火墙兼容拦截,解压工具至纯英文路径。

结语
对于全部使用 Windows 开发 UniApp 的团队,iOSUploader 彻底打破「iOS 上架必须买 Mac」的行业固有认知,从证书制作、描述文件生成、云打包到 IPA 上传、应用后台管理实现全流程 Windows 闭环,最低老旧 Win7 电脑即可运行。同时依托软件级账号隔离能力,从根源规避苹果 3.2 (f) 关联封号风险,大幅降低硬件采购与账号资产损失成本,是 UniApp、Flutter 跨平台开发者无 Mac 上架 iOS 的刚需工具。
工具官网:https://iosuploader.xinxishehui.com/

继续阅读 »

前言
做 Uni-App 开发的团队大多以 Windows 电脑为主,传统 iOS 上架必须依赖 Mac 电脑,通过钥匙串生成 CSR、制作 P12 发布证书、创建 mobileprovision 描述文件,再用 Xcode/Transporter 上传 IPA,硬件成本高、多账号极易触发苹果 3.2 (f) 关联风控批量封号。
很多中小团队没有 Mac 设备,虚拟机隔离又存在底层设备指纹泄露、卡顿超时、隐性账号关联等致命缺陷;而iOSUploader完美解决痛点,全 Windows 兼容(Win7/8/10/11),仅 45.2MB 轻量化工具,
无需 Mac、无需虚拟机,一站式完成 Bundle ID 创建、P12 证书生成、描述文件制作、HBuilderX 云打包 IPA 分片上传、App Store 后台元数据管理,同时内置独立隔离环境,规避苹果多账号关联封号风险。

官网地址:https://iosuploader.xinxishehui.com/

核心优势:
全 Windows 兼容,最低支持 Win7 老旧办公电脑;
纯软件隔离,斩断设备 / 网络指纹,规避 3.2 (f) 批量封号;
全程不用 Apple ID 密码,仅 P8 密钥 API 授权,杜绝账号泄露;
一站式证书、Bundle ID、设备 UDID、描述文件管理;
直接上传 IPA 至 App Store Connect,替代 Xcode、Transporter;
批量管理多开发者账号,适配 UniApp、Flutter 跨平台项目。

**一、前期准备工作

  1. 基础环境**
    Windows 系统:Win7/Win8/Win10/Win11 32/64 位均可;
    下载 iOSUploader v2.1.3,大小 45.2MB,解压直接运行无需安装;
    有效苹果开发者付费账号(个人 / 企业账号,免费账号无法上架 App Store);
    Uni-App 项目(HBuilderX 开发完成,manifest.json 提前规划 Bundle ID);
    提前获取 App Store Connect API 三要素:Issuer ID、Key ID、P8 密钥文件(全程免账号密码登录)。
  2. 提前获取 P8 密钥(关键,免 Apple ID 登录)
    登录 App Store Connect → 用户和访问 → API 密钥;
    点击「+」新建密钥,命名自定义,权限选 App 管理员;
    生成后仅一次下载 AuthKey_xxx.p8 文件,妥善保存;
    复制页面上方 Issuer ID、列表内 Key ID,填入 iOSUploader 设置面板;
    优势:不用输入 Apple ID 与登录密码,多人协作不会泄露账号,大幅降低 3.2 (f) 违规关联风险。

二、Windows 端用 iOSUploader 创建 Bundle ID(应用唯一包名)
Bundle ID 是 UniApp iOS 应用唯一标识,证书、描述文件、打包必须保持完全一致,传统操作需登录苹果开发者网页,iOSUploader 内置可视化创建面板:
打开 iOSUploader,左侧菜单栏切换「Bundle ID 管理」;
点击「创建 Bundle」,填写名称、自定义包名(格式:com. 公司名。项目名,例:com.xxx.uniappshop);
按需勾选 App 权限服务:推送通知、Apple 登录、iCloud、支付、NFC、Game Center 等 UniApp 所需能力;
确认创建,工具自动同步至苹果开发者后台,列表可查看、管理所有 Bundle ID;
复制 Bundle ID,保存至 HBuilderX,后续打包统一填写。

三、Windows 无 Mac 生成 P12 发布证书(打包必备签名文件)
传统 Mac 流程:钥匙串生成 CSR 证书签名请求→开发者后台创建证书→导出 P12,Windows 无钥匙串无法操作,iOSUploader 内置证书生成引擎,一步导出.p12 文件:
步骤 1:进入证书管理面板
左侧菜单「证书管理」→「创建证书」,选择证书类型:
iOS App Development:真机测试、TestFlight 内测;
iOS Distribution(App Store):正式上架打包,本文上架选此项。
步骤 2:生成并导出 P12 文件
填写证书名称,设置 P12 加密密码(打包时必须填写,牢记);
工具自动生成 CSR 并提交苹果服务器,无需手动操作;
创建成功后,本地导出.p12证书文件,单独存放;
工具列表可加载、查看所有证书过期时间,支持批量管理多账号证书;
注意:单个开发者账号最多 3 个发布证书,旧证书无用可直接在工具内删除释放名额。

四、Windows 制作.mobileprovision 描述文件
描述文件绑定 Bundle ID+P12 证书,是 UniApp 云打包签名核心文件,分开发 / 发布两类:
iOSUploader 左侧「描述文件管理」→「创建描述文件」;
类型选择:App Store(发布上架);
选择上一步创建的 Bundle ID,勾选刚生成的 Distribution 发布证书;
自定义描述文件名称,确认生成;
下载.mobileprovision描述文件保存本地;
开发测试版额外勾选设备 UDID,可在工具「设备管理」批量录入测试机 UDID。

五、HBuilderX Uni-App 云打包 IPA(Windows 全程操作)

无需 Mac 本地编译,DCloud 云打包直接产出 IPA 安装包:
HBuilderX 打开 UniApp 项目,顶部菜单:发行 → 原生 App - 云打包 → iOS;
打包参数配置:
应用包名(Bundle ID):与 iOSUploader 创建的包名完全一致;
版本号、build 内部版本号按需填写;
证书选择「自有证书」,上传 Windows 导出的.p12文件,输入 P12 加密密码;
上传对应.mobileprovision描述文件;
勾选应用图标、启动图,确认打包;
等待云端编译完成,下载生成的.ipa安装包到 Windows 本地。

六、iOSUploader Windows 上传 IPA 至 App Store Connect(免 Mac 上传)
摒弃 Xcode、Transporter 仅 Mac 可用限制,单台 Win7 电脑即可分片上传 IPA,自带防关联隔离通道:
打开 iOSUploader「上传管理」,顶部设置填入提前准备的 Issuer ID、Key ID、P8 证书路径,保存 API 授权;
点击「选择 IPA」,选中 HBuilderX 下载的 ipa 文件;
工具自动分片上传(超大文件分块传输,断点续传),实时显示上传日志;
上传完成自动创建 App Store 构建版本,无需登录网页后台;
配套功能:
截图管理:批量上传各尺寸 iPhone/iPad 截图,支持多语言;
应用元数据编辑:简介、关键词、销售地区、价格、年龄分级;
审核消息中心:查看苹果官方留言、回复审核问题、管理附件;
批量管理多应用、多账号切换,每个窗口独立隔离环境,杜绝账号关联。

七、关键:规避苹果 3.2 (f) 多账号关联封号(iOSUploader 核心价值)
大量 UniApp 多项目团队踩坑:同一台电脑、同一网络操作多个苹果开发者账号,被苹果风控判定环境关联,触发 3.2 (f) 条款连锁封号,所有账号应用下架、收益冻结、申诉成功率极低。
传统方案短板对比
表格
方案 成本 风控风险 Windows 适配
多台 Mac 物理隔离 极高,设备折旧运维贵 共用网络仍存在关联风险 不支持
Windows 虚拟机 高,占用大量内存硬盘 底层设备标识泄露,批量封号频发 卡顿、上传超时
iOSUploader 纯软件隔离 极低,单台电脑管理上百账号 独立隔离环境,无硬件指纹交叉 Win7 全兼容
工具防关联机制
独立隔离上传通道,不携带本机硬件、网卡、系统缓存信息;
多开工具窗口,每个账号独立运行环境,数据完全隔离;
API P8 密钥授权,全程不登录 Apple ID,消除账号登录轨迹关联;
上传、证书、Bundle ID 操作无统一设备指纹留痕,规避风控追溯链路。

九、常见报错排查(Windows 免 Mac 流程高频问题)
云打包签名失败:P12 密码错误、Bundle ID 与描述文件不匹配、证书过期;
IPA 上传失败:P8 密钥失效(重新生成下载)、网络波动(工具支持分片续传);
账号关联标记:停止共用虚拟机 / 旧上传工具,切换 iOSUploader 独立隔离窗口操作;
Win7 运行异常:关闭系统防火墙兼容拦截,解压工具至纯英文路径。

结语
对于全部使用 Windows 开发 UniApp 的团队,iOSUploader 彻底打破「iOS 上架必须买 Mac」的行业固有认知,从证书制作、描述文件生成、云打包到 IPA 上传、应用后台管理实现全流程 Windows 闭环,最低老旧 Win7 电脑即可运行。同时依托软件级账号隔离能力,从根源规避苹果 3.2 (f) 关联封号风险,大幅降低硬件采购与账号资产损失成本,是 UniApp、Flutter 跨平台开发者无 Mac 上架 iOS 的刚需工具。
工具官网:https://iosuploader.xinxishehui.com/

收起阅读 »

1

1

1

1

1

1

2

2

2

1

1

1