Wie deaktiviere ich die Schriftskalierung in der React Native für IOS- und Android-App?

Lesezeit: 5 Minuten

AJAs Benutzeravatar
AJA

Die Vergrößerung der Geräteschriftart funktioniert manchmal nicht (in Bezug auf das Design).

  • Dies ist eine schlechte Wahl, da es Benutzern mit schlechter Sehkraft sowie Benutzern mit zitternden Händen oder anderen motorischen Problemen schadet, die die Interaktion mit kleinen Berührungszielen erschweren. Eine bessere Lösung besteht darin, den Stil so zu korrigieren, dass Änderungen an der Schriftart ihn nicht beeinträchtigen. (Verwenden Sie beispielsweise keine festen Höhen oder Breiten.)

    – Aaron Brager

    17. August 2018 um 15:01 Uhr

  • Das ist nicht immer der Fall, @AaronBrager. Auf kleinen Geräten ist es fast unmöglich, den Stil so zu „korrigieren“, dass er in dieselbe Zeile passt. Wenn Sie also nicht viel Text auf Ihrem Bildschirm sehen möchten, können Sie durchaus rücksichtsvoller sein. Dies ist also völlig optional und nicht obligatorisch. Was auch immer Ihren Bedürfnissen entspricht, Sie tun es.

    – AJA

    19. August 2018 um 11:45 Uhr


  • Es muss nicht in derselben Zeile sein. Benutzer, die die Schriftgröße ganz nach oben stellen, sind froh, wenn der Text umständlich umbrochen wird.

    – Aaron Brager

    19. August 2018 um 14:27 Uhr

  • Falls der Projektinhaber nicht möchte, dass seine App so kaputt geht, kann er dies verwenden. Andernfalls können sie dies völlig ignorieren und die Schriftart auf der automatischen Größe belassen. Auch dies ist völlig optional. @AaronBrager

    – AJA

    19. August 2018 um 14:39 Uhr

Levi's Benutzer-Avatar
Levi

Das Deaktivieren der Schriftartenskalierung kann die Zugänglichkeit Ihrer App beeinträchtigen, idealerweise, wenn Sie die Skalierung für Apps einschränken möchten, die React Native 0.58.0 und höher verwenden; Benutze die maxFontSizeMultiplier Stütze auf konkret Text Komponenten.

Wenn Sie die Schriftskalierung jedoch unbedingt in Ihrer gesamten Anwendung deaktivieren möchten, können Sie dies tun, indem Sie dies global festlegen allowFontScaling Stütze im defaultProps von Text.

Sie sollten diese Zeilen in Ihrem Root-Einstiegspunkt platzieren (normalerweise). index.js) Vor AppRegistry.registerComponent.

Für React Native 0.56.0+

Text.defaultProps = Text.defaultProps || {};
Text.defaultProps.allowFontScaling = false;

Für frühere Versionen von React Native sollten Sie nur die zweite Zeile benötigen, aber beides zu haben schadet nicht. Die erste Zeile schützt nur vor dem Text Komponente nicht mit defaultProps Dies ist bei React Native 0.56.0 und höher der Fall.

Fügen Sie die obigen Zeilen in die Einstiegspunktdatei Ihrer React Native-Anwendung ein (normalerweise index.js, app.js oder main.js), um diese Requisite auf alle anzuwenden Text Komponenten in Ihrer Anwendung.

Diese Requisite wirkt sich nur aus Text Komponenten, auf die Sie möglicherweise die gleichen Änderungen anwenden möchten TextInput was mit einem ähnlichen Snippet möglich ist:

TextInput.defaultProps = TextInput.defaultProps || {};
TextInput.defaultProps.allowFontScaling = false;

Beachten Sie außerdem, dass einige Komponenten die Schriftartskalierungseinstellungen nicht befolgen, zum Beispiel: Alert, PickerIOS, DatePickerIOS, TabBarIOS, SegmentedControlIOS da diese alle nativ gezeichnet sind und sich nicht auf das verlassen Text Komponente.

  • Hackig, aber dennoch brillant. Ich benutze es.

    – Kaiwen Huang

    18. September 2018 um 10:35 Uhr

  • @KiritModi Ich denke, dass Alert vollständig nativ gerendert wird – daher vermute ich, dass Sie nicht steuern können, wie Text innerhalb des Modals gerendert wird. Stattdessen müssten Sie Ihre eigene Warnkomponente implementieren.

    – Levi

    23. Okt. 2018 um 2:25

  • Falls sich einige von Ihnen fragen, wo dies implementiert werden soll, platzieren Sie den obigen Code direkt unter Ihren Importanweisungen ~/index.js. Stellen Sie sicher, dass Sie auch die importieren Text Komponente in RN. Übrigens verwende ich RN 0.57.8.

    – Mixmeister Mike

    16. Januar 2019 um 7:04

  • Text.defaultProps kann manchmal undefiniert sein, daher ist es besser, Folgendes zu verwenden: Text.defaultProps = Text.defaultProps || {}. Es behandelt beide Fälle.

    – dphaener

    29. Januar 2019 um 19:00 Uhr


  • @dphaener das Original überprüft Text.defaultProps undefiniert sein.

    – Levi

    4. Februar 2019 um 1:35

AJAs Benutzeravatar
AJA

Für React native 0.58+

Es ist vorzuziehen, die Schriftskalierung beizubehalten, Sie können sie jedoch einschränken, indem Sie „Text new prop“ verwenden maxFontSizeMultiplier

Verwenden Sie für React Native 0.56+ die Antwort von Levi

Text.defaultProps = Text.defaultProps || {};
Text.defaultProps.allowFontScaling = false;

Für React native 0,55 und niedriger

Hinzufügen Text.defaultProps.allowFontScaling=false am Anfang der App (z. B. main.js oder app.js usw.), um diese Requisite auf alle Textkomponenten in der gesamten App anzuwenden.

  • Wenn ich es dem Konstruktor in App.js hinzufüge, erhalte ich die Fehlermeldung „Übersehe ich etwas?“

    – ROI

    23. Februar 2018 um 17:05 Uhr

  • @AnshulKoka, kannst du das bestätigen? Ich habe die Dokumentation überprüft und nichts bezüglich Standard-Requisiten und AllowFontScalling gesehen.

    – AJA

    12. Juli 2018 um 7:42 Uhr

  • @AJA Ich habe heute gerade ein Upgrade von React-Native 0.55.4 auf 0.56.0 durchgeführt und Text.defaultProps erscheint als undefiniert.

    – Anshuul Kai

    12. Juli 2018 um 8:46


Keshav Geras Benutzeravatar
Keshav Gera

When user increase full font size from setting 

Die Vergrößerung der Geräteschriftart wird nicht beeinträchtigt (in Bezug auf das Styling).

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}
/>

Beachten Sie außerdem, dass einige Komponenten die Schriftartskalierungseinstellungen nicht befolgen, zum Beispiel: Alert, PickerIOS, DatePickerIOS, TabBarIOS, SegmentedControlIOS, da diese alle nativ gezeichnet werden und nicht auf der Textkomponente basieren.

Ich bin etwas spät dran, aber wenn jemand eine Antwort mit Typescript möchte, hier ist sie

interface TextWithDefaultProps extends Text {
  defaultProps?: { allowFontScaling?: boolean };
}

(Text as unknown as TextWithDefaultProps).defaultProps = {
   ...((Text as unknown as TextWithDefaultProps).defaultProps || {}),
   allowFontScaling: false,
 };

 if (Text.defaultProps == null) {
            Text.defaultProps = {};
            Text.defaultProps.allowFontScaling = false;
        }

Ich habe diesen Code im Konstruktor von behalten index.js.Es hat wirklich gut funktioniert. Ich verwende die native React-Version 0.59.9 Zu Ihrer Information.

  • Text.defaultProps = Text.defaultProps || {} ; Text.defaultProps.allowFontScaling = false; Dies entspricht Ihrem Code

    – AJA

    27. Juni 2019 um 23:11 Uhr

Benutzeravatar von Sebastien Lorber
Sébastien Lorber

Erstelle ein <AppText> Komponente und verwenden Sie sie mit Ihren Voreinstellungen anstelle des Originals, mit Ihren eigenen Standardeinstellungen, einschließlich falscher Schriftskalierung. Das ist besser, weil Sie es mit Ihrer eigenen API anreichern können.

Zum Beispiel erlaubt mein AppText Dinge wie:

<AppText id="some.translation.key" color="primary" size="l" underline italic bold/>

  • Text.defaultProps = Text.defaultProps || {} ; Text.defaultProps.allowFontScaling = false; Dies entspricht Ihrem Code

    – AJA

    27. Juni 2019 um 23:11 Uhr

Josephs Benutzeravatar
Joseph

Importieren Sie die aktuelle Datei in eine andere Datei Text Komponente als ScaledText Also als Backup, und dann neu definieren Textüberschreibt die allowFontScaling Stütze.

export function Text(props) {
  return <ScaledText {...props} allowFontScaling={false} />;
}

Importieren Sie dann Ihre lokal definierten Text Komponente anstelle des integrierten React Native Text. Dies ist auch nützlich, wenn Sie die Schriftskalierung nur für bestimmte Teile Ihrer App elegant deaktivieren möchten.

1453880cookie-checkWie deaktiviere ich die Schriftskalierung in der React Native für IOS- und Android-App?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy