2017-05-07 2 views
0

So habe ich ein paar benutzerdefinierte Zellen mit in meiner App. Innerhalb meiner ViewCell sind Labels. Ich möchte, dass die Schriftgröße dieser Etiketten von der Textgröße des Geräts abhängig ist, genauso wie sich der Text des TextCell ändert, wenn Sie die Textgröße Ihres Geräts anpassen.Wie wird die Schriftgröße von `Label` in` ViewCell` vom Gerät in Xamarin Forms abhängig gemacht?

Unten im Bild ist ein eingebauter TextCell. enter image description here

Below Bild wird mit einer benutzerdefinierten Zelle ViewCell enter image description here

Im Test diesen in einem iOS-Gerät und die Textgröße wird auf den kleinsten verfügbaren gesetzt. Wenn ich die Gerätetextgröße ändere, werden die Zellen, die TextCell s verwenden, automatisch geändert. Die Etiketten in der ändert sich überhaupt nicht. Jeder Vorschlag, der mich auf die richtige Richtung weist, wird sehr geschätzt.

+1

Mögliches Duplikat von http: // stackoverflow.com/questions/38066791/how-do-i-support-barrierefreiheit-font-sizes-in-xamarin-formen –

Antwort

1

Kurze Antwort

Die TextCell die native UITableViewCell auf iOS verwendet. Diese native Ansicht berücksichtigt die Einstellungen für die Barrierefreiheit des Geräts. Wenn Sie die Xamarin Forms Label verwenden, tut es das nicht. Xamarin Forms unterstützt den dynamischen iOS-Typ (noch) nicht.

Erklärung

Die Formulare Label verwendet die FontSizeConverter die tatsächliche Schriftgröße einzustellen. Diese Schriftgröße defaults to the value -1, wenn Sie selbst keinen Wert festlegen. Der Wert -1 führt zur Verwendung von NamedSize.Default (siehe the Font class).

Wenn Sie einen Blick auf FontSizeConverter werfen, wenn es den Wert nicht als absoluten Wert analysieren kann, wird es versuchen, in einen NamedSize Wert zu konvertieren. In diesem Fall wird Device.GetNamedSize verwendet, um die tatsächliche Größe zu erhalten. Dies geschieht über die Schnittstelle IPlatformServices, die diese in absolute Werte umwandelt (see the IOSPlatformServices).

Es gibt auch eine FontExtensions Klasse, die die gleiche Konvertierung von Named Size in einen absoluten Wert implementiert. Nicht sehr trocken auf den ersten Blick, aber es könnte einen guten Grund dafür geben, von dem ich nichts weiß.

Leider berücksichtigen sowohl die FontExtensions als auch die IOSPlatformServices nicht die Eingabehilfen von iOS, sondern geben nur absolute Werte zurück.

Mögliche Lösung

Auf iOS-Geräten können Sie UIKit.UIApplication.SharedApplication.PreferredContentSizeCategory verwenden, um die aktuelle Erreichbarkeit Kategorie zu erhalten. Basierend auf diesem Wert können Sie eine Skalierung für Ihre Schriftarten festlegen (verwenden Sie DynamicResource für die Schriftgrößen, wenn Sie sie in XAML verwenden, damit sie zur Laufzeit geändert werden können).

Oder werfen Sie einen Blick auf SushiHangover's answer auf eine ähnliche Frage.

Siehe the preferredContentSizeCategory on the Apple Developer API reference.

+0

Danke Tim. Ich werde den obigen Link überprüfen. –

Verwandte Themen