AJA
La ampliación del tamaño de la fuente del dispositivo a veces se romperá (estilo inteligente).
leví
Deshabilitar el escalado de fuentes puede dañar la accesibilidad de su aplicación, idealmente si desea limitar el escalado de aplicaciones que usan React native 0.58.0 y superior; utilizar el maxFontSizeMultiplier
apuntalar en específico Text
componentes
Sin embargo, si desea deshabilitar absolutamente la escala de fuentes en toda su aplicación, puede hacerlo configurando globalmente el allowFontScaling
apuntalar en el defaultProps
de Text
.
Debe colocar estas líneas en su punto de entrada raíz (normalmente index.js
) antes AppRegistry.registerComponent
.
Para reaccionar nativo 0.56.0+
Text.defaultProps = Text.defaultProps || {};
Text.defaultProps.allowFontScaling = false;
Para versiones anteriores de React Native, solo debería necesitar la segunda línea, pero tener ambas no le hará daño. La primera línea sólo protege contra el Text
componente que no tiene defaultProps
que es el caso de React Native 0.56.0 y superior.
Agregue las líneas anteriores en el archivo de punto de entrada de su aplicación React Native (generalmente index.js
, app.js
o main.js
) para aplicar este apoyo a todos Text
componentes de su aplicación.
Este accesorio solo afectará Text
componentes y es posible que desee aplicar los mismos cambios a TextInput
que se puede hacer con un fragmento similar:
TextInput.defaultProps = TextInput.defaultProps || {};
TextInput.defaultProps.allowFontScaling = false;
También tenga en cuenta que algunos componentes no obedecerán la configuración de escala de fuente, por ejemplo: Alert
, PickerIOS
, DatePickerIOS
, TabBarIOS
, SegmentedControlIOS
ya que todos estos están dibujados de forma nativa y no dependen del Text
componente.
-
Hackish, pero brillante sin embargo. lo estoy usando
–Kaiwen Huang
18/09/2018 a las 10:35
-
@KiritModi Creo que Alert se representa de forma completamente nativa, así que supongo que no puede controlar cómo se representa el texto dentro del modal. En su lugar, necesitaría implementar su propio componente de alerta.
– Levi
23 de octubre de 2018 a las 2:25
-
En caso de que algunos de ustedes se pregunten dónde implementar esto, coloque el código anterior justo debajo de sus declaraciones de importación en
~/index.js
. Asegúrese de importar también elText
componente en RN. Por cierto, estoy ejecutando RN 0.57.8.– Maestro de mezclas Mike
16 de enero de 2019 a las 7:04
-
Text.defaultProps a veces puede no estar definido, por lo que es mejor usar:
Text.defaultProps = Text.defaultProps || {}
. Maneja ambos casos.– dphaener
29/01/2019 a las 19:00
-
@dphaener el original buscado
Text.defaultProps
siendo indefinido.– Levi
4 de febrero de 2019 a las 1:35
AJA
Para React nativo 0.58+
Es preferible mantener la escala de fuente, pero puede limitarla usando Text new prop maxFontSizeMultiplier
Para React native 0.56+ use la respuesta de Levi
Text.defaultProps = Text.defaultProps || {};
Text.defaultProps.allowFontScaling = false;
Para React nativo 0.55 e inferior
Agregar Text.defaultProps.allowFontScaling=false
al comienzo de la aplicación (p. ej., main.js o app.js, etc.) para aplicar este accesorio en todos los componentes de texto en toda la aplicación.
-
Cuando lo agrego al constructor en App.js, aparece un error, ¿me pierdo algo?
– ROI
23 de febrero de 2018 a las 17:05
-
@AnshulKoka, ¿puedes confirmar esto? Estaba revisando la documentación y no vi nada relacionado con los accesorios predeterminados y allowFontScalling.
– AJA
12 de julio de 2018 a las 7:42
-
@AJA Acabo de actualizar de react-native 0.55.4 a 0.56.0 hoy y Text.defaultProps aparece como indefinido.
– Anshuul Kai
12 de julio de 2018 a las 8:46
keshav gera
When user increase full font size from setting
La ampliación del tamaño de la fuente del dispositivo no se romperá (estilo inteligente).
index.js file
import {AppRegistry} from 'react-native';
import App from './src/App';
import {name as appName} from './app.json';
import {Text, TextInput} from 'react-native';
AppRegistry.registerComponent(appName, () => App);
//ADD this
if (Text.defaultProps == null) {
Text.defaultProps = {};
Text.defaultProps.allowFontScaling = false;
}
if (TextInput.defaultProps == null) {
TextInput.defaultProps = {};
TextInput.defaultProps.allowFontScaling = false;
}
<CalendarStrip
shouldAllowFontScaling={false}
/>
También tenga en cuenta que algunos componentes no obedecerán la configuración de escalado de fuentes, por ejemplo: Alert, PickerIOS, DatePickerIOS, TabBarIOS, SegmentedControlIOS, ya que todos se dibujan de forma nativa y no dependen del componente Texto.
if (Text.defaultProps == null) {
Text.defaultProps = {};
Text.defaultProps.allowFontScaling = false;
}
Mantuve este fragmento de código dentro del constructor de index.js
. Realmente funcionó bien. Por el estoy usando reaccionar versión nativa 0.59.9
para tu información
Llego un poco tarde, pero si alguien quiere una respuesta con Typescript, aquí está
interface TextWithDefaultProps extends Text {
defaultProps?: { allowFontScaling?: boolean };
}
(Text as unknown as TextWithDefaultProps).defaultProps = {
...((Text as unknown as TextWithDefaultProps).defaultProps || {}),
allowFontScaling: false,
};
sebastien lorber
Crear un <AppText>
componente y utilícelo con sus ajustes preestablecidos en lugar del original, con su propio valor predeterminado, incluida la escala de fuente falsa. Esto es mejor porque puedes enriquecerlo con tu propia API.
Por ejemplo, mi AppText permite hacer cosas como:
<AppText id="some.translation.key" color="primary" size="l" underline italic bold/>
Joseph
En otro archivo, importe el actual Text
componente como ScaledText
así como una copia de seguridad, y luego redefinir Text
anulando el allowFontScaling
apuntalar.
export function Text(props) {
return <ScaledText {...props} allowFontScaling={false} />;
}
Luego, importe su definido localmente Text
componente, en lugar del React Native incorporado Text
. Esto también es útil si desea deshabilitar elegantemente el escalado de fuentes solo en ciertas partes de su aplicación.
Esta es una mala elección porque daña a los usuarios con problemas de visión y a los usuarios con manos temblorosas u otros problemas motores que dificultan la interacción con objetivos táctiles pequeños. Una mejor solución es arreglar su estilo para que los cambios de fuente no lo rompan. (Por ejemplo, no use alturas o anchos fijos).
– Aarón Brager
17 de agosto de 2018 a las 15:01
No siempre es el caso @AaronBrager, en un dispositivo pequeño es casi imposible “arreglar” su estilo para que se ajuste al texto en la misma fila. Entonces, a menos que no tenga mucho texto para ver en su pantalla, entonces sí, puede ser más considerado. Así que esto es totalmente opcional y no obligatorio. Lo que sea que se ajuste a tu necesidad, lo haces.
– AJA
19 de agosto de 2018 a las 11:45
No tiene que estar en la misma fila. Los usuarios que suben el tamaño de la fuente al máximo se alegran de tener un ajuste de texto incómodo.
– Aarón Brager
19 de agosto de 2018 a las 14:27
Bueno, en caso de que el propietario del proyecto no quiera que su aplicación se rompa así, puede usar esto. De lo contrario, pueden ignorar esto por completo y mantener la fuente en tamaño automático. De nuevo, esto es totalmente opcional. @AaronBrager
– AJA
19 de agosto de 2018 a las 14:39