Die Vergrößerung der Geräteschriftart funktioniert manchmal nicht (in Bezug auf das Design).
Wie deaktiviere ich die Schriftskalierung in der React Native für IOS- und Android-App?
AJA
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 importierenText
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
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 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
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
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.
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