Я реализую доступность размера шрифта в приложении NativeScript-Vue.
Я хочу разрешить или запретить изменение размера Label с помощью атрибута XML для Android и iOS, но поведение и реализация на платформах различны.
Android
Все метки по умолчанию масштабируются. Если я хочу, чтобы размер метки не менялся, мне нужно вызвать функцию setTextSize
в событии loaded
, следуя этому решению .
<Label text="Not resizable" @loaded="$androidFixedLabelSize($event, 70)" />
Vue.prototype.$androidFixedLabelSize = function({ object }, fontSize) {
if (object.android)
object.nativeView.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, utils.layout.toDevicePixels(fontSize));
}
IOS
Метки не масштабируются по умолчанию. Чтобы изменить размер метки, мне нужно использовать плагин nativescript-accessibility-ext и добавить атрибут accessibilityAdjustsFontSize
.
<Label text="Resizable" accessibilityAdjustsFontSize="true" />
Добавить один атрибут для фиксированного Android и один для iOS с изменяемыми размерами немного громоздко.
Я думал о том, чтобы все метки можно было изменять по умолчанию и указать, не хочу ли я изменить размер с помощью директивы или атрибута.
Могу ли я достичь этого с помощью специальной директивы? Или что-то другое?
Обновление
Мне удалось предотвратить изменение размера на Android с помощью директивы без жесткого размера шрифта, но есть проблема: update
запускается только для нескольких меток. el.nativeView.android
в bind
и inserted
крючки не определены.
Vue.directive("noresize", {
update: el => {
if (el.nativeView.android) {
el.nativeView.android.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, el.nativeView.fontSize);
} else {
// iOS code
}
}
});
В iOS я хотел бы просто установить accessibilityAdjustsFontSize="false"
, но это означает, что по умолчанию это правда.
Итак, следующий вопрос: как мне установить accessibilityAdjustsFontSize="true"
на всех компонентах Label на iOS?