Nativescript 允许/防止标签的辅助功能字体大小调整

Nativescript 允许/防止标签的辅助功能字体大小调整,nativescript,nativescript-vue,Nativescript,Nativescript Vue,我正在NativeScript Vue应用程序中实现字体大小可访问性。 我想允许或阻止Android和iOS通过XML属性调整标签大小,但平台上的行为和实现是不同的 安卓 默认情况下,将缩放所有标签。如果希望标签不调整大小,则需要在loaded事件中调用函数setTextSize,如下所示 Vue.prototype.$androidFixedLabelSize=函数({object},fontSize){ if(object.android) object.nativeView.setTe

我正在NativeScript Vue应用程序中实现字体大小可访问性。
我想允许或阻止Android和iOS通过XML属性调整标签大小,但平台上的行为和实现是不同的

安卓
默认情况下,将缩放所有标签。如果希望标签不调整大小,则需要在
loaded
事件中调用函数
setTextSize
,如下所示


Vue.prototype.$androidFixedLabelSize=函数({object},fontSize){
if(object.android)
object.nativeView.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX,utils.layout.toDevicePixels(fontSize));
}
iOS
默认情况下不缩放标签。要调整标签大小,我需要使用plugin并添加属性
accessibilityAdjustsFontSize


必须为固定Android添加一个属性,为可调整大小的iOS添加一个属性,这有点麻烦

我想让所有标签在默认情况下都可以调整大小,并指定我是否希望一个标签不通过指令或属性调整大小。
我可以通过自定义指令实现这一点吗?还是别的什么


更新 我可以通过一个没有硬编码字体大小的指令来阻止Android上的大小调整,但有一个问题:
update
仅对少数标签触发<
bind
中的code>el.nativeView.android和
inserted
挂钩未定义

Vue.directive(“noresize”{
更新:el=>{
如果(el.nativeView.android){
el.nativeView.android.setTextSize(android.util.TypedValue.COMPLEX\u UNIT\u DIP,el.nativeView.fontSize);
}否则{
//iOS代码
}
}
});
在iOS上,我只想简单地设置
accessibilityAdjustsFontSize=“false”
,但这意味着默认情况下它是真的


因此,下一个问题是:如何在iOS上的所有标签组件上设置可访问性AdjustsFontSize=“true”。

多亏了的开发人员Morten Sjøgren,我才能够添加一个全局事件。辅助功能大小调整现在应用于所有标签组件,除非属性
noResize
为true

app.js

import '@nota/nativescript-accessibility-ext';
import { Label } from 'tns-core-modules/ui/label';

// code

Label.on(Label.loadedEvent, ({ object }) => {
    if (object.noResize) {
        if (object.android) {
            object.nativeView.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, object.fontSize);
        }
    } else {
        object.accessibilityAdjustsFontSize = "true";
    }
 });



当然,您可以使用自定义指令来实现,我相信这就是选择Vue或Angular等框架而不是NativeScript Core的全部原因。但屏幕上有120个标签?我希望您了解ListView组件,如果可能的话,可以将其用于长内容列表。同样仅供参考,您可以通过简单地在CSS的px中指定字体大小(字体大小:15px)来使用px单元。使用自定义指令,我在钩子中访问的Label nativeView对象没有
setTextSize
(此外,
android
ios
属性显示为未定义,直到
update
hook)。ListView不适用于我的120 max标签页(最坏情况)。使用简单的标签不会导致渲染延迟。最后,通过
setTextSize
设置字体大小是我找到的避免自动缩放的唯一方法。您可能无法使用正确的属性访问它。你能分享指令的操场样本吗?我的应用程序也支持自动缩放,我不需要在Android上做任何事情,也不完全确定为什么需要使用px。DIP单位(默认值)仍然良好。对于iOS,我采用了插件逻辑,但在字体级别实现了相同的逻辑,因此它将自动为所有组件缩放。我正在使用基于px的
setTextSize
,这是我发现的唯一防止自动缩放的方法。我没有深入检查代码。仔细观察,我发现你可以使用Dipsorry,你是在试图避免自动缩放还是实现它?因为在iOS中,它不是默认处理的,如果你想支持自动缩放,你可以使用插件。
<Label text="Don't resize" noResize="true" />