Ich verwende den dynamischen Typ in einer Anwendung und habe Szenarios, in denen ich das Erscheinungsbild der Schriftart ändern möchte, z. B. kursiv oder unbold. Das Hinzufügen eines Stils ist einfach:
%Vor%Es gibt jedoch keinen eindeutigen Mechanismus zum Entfernen eines Stils. Ich könnte versuchen, die Attribute anzupassen, aber sie sehen noch entmutigender aus, mit völlig undokumentierten APIs:
%Vor%
Gibt es noch eine andere Möglichkeit, die mir fehlt? Ich könnte [UIFont systemFontWithSize:descriptor.pointSize]
verwenden, aber ich möchte nicht verlieren, welche Zeichnungsregeln vom dynamischen Typ bereitgestellt werden.
Die fontDescriptorWithSymbolicTraits:
-Methode ist tatsächlich in der Lage, das zu tun, was Sie wollen, mit Ausnahme einiger Randfälle bei der Unterstützung von Zeichensatzmerkmalen unter den integrierten semantischen Textstilen. Das Schlüsselkonzept hier ist, dass diese Methode alle symbolischen Merkmale auf dem vorherigen Deskriptor mit dem / den neuen Merkmal (en) ersetzt. Die Dokumentation < Es ist ein bisschen wischwaschend darauf, einfach zu sagen, dass die neuen Merkmale "Vorrang vor" dem Alten haben.
Bitweise Operationen werden verwendet, um bestimmte Merkmale hinzuzufügen und zu entfernen, aber es scheint, dass besondere Sorgfalt erforderlich ist, wenn mit einem Deskriptor gearbeitet wird, der von preferredFontDescriptorWithTextStyle:
generiert wird. Nicht alle Schriftarten unterstützen alle Merkmale. Die Überschrift-Schriftart wird zum Beispiel entsprechend der bevorzugten Inhaltsgröße des Benutzers gewichtet, und selbst wenn Sie den Deskriptor seiner fett gedruckten Eigenschaft entfernen können, wird das passende UIFont
fett dargestellt. Leider ist dies nirgends dokumentiert, so dass die Entdeckung zusätzlicher Nuancen dem Leser als Übung überlassen wird.
Das folgende Beispiel veranschaulicht diese Probleme:
%Vor% FYI, die Funktionen isBold
und isItalic
, die oben der Kürze halber verwendet wurden, könnten wie folgt implementiert werden:
Tags und Links objective-c ios ios7 uifont