UILabel-Darstellungsschrift und zugewiesene Zeichenfolgenschrift

In meiner App wird eine globale benutzerdefinierte Schriftart auf alle Labels angewendet:

UIFont *font = [UIFont fontWithName:kMyFontName size:15.0]; 
[[UILabel appearance] setFont:font];

Das funktioniert gut. In einigen Fällen möchte ich jedoch in der Lage sein, eine andere Schriftart für einen bestimmten Bereich einer UILabel-Zeichenfolge anzugeben.

Also habe ich so etwas:

NSString *string = @"Foo Bar Baz";
UIFont *boldFont = [UIFont fontWithName:kMyBoldFontName size:15.0]; 
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string];
[attrString setAttributes:@{ NSFontAttributeName: boldFont } range:NSMakeRange(0, 3)];
self.myLabel.attributedText = attrString;

Dies scheint jedoch nicht zu funktionieren. Ich erwarte, dass das "Foo" fett ist, aber die gesamte Zeichenfolge hat nur die Standardschriftart. Es ist, als ob die Fettschrift überhaupt nicht angewendet wird und durch die im UILabel-Darstellungs-Proxy festgelegte Schrift überschrieben wird.

Wenn ich die UILabel-Erscheinungslinie entferne, funktioniert sie einwandfrei (ich sehe einen Teil der Zeichenfolge in Fettdruck). Grundsätzlich möchte ich, dass meine benutzerdefinierte Schriftart auf das Etikett angewendet wird, aber eine separate Schriftart auf einen anderen Bereich der Zeichenfolge. Normalerweise funktioniert dies gut mit zugewiesenen Zeichenfolgen, aber aus irgendeinem Grund deaktiviert das Einstellen der UILabel-Darstellungsschrift diese Funktionalität (oder so scheint es).

Erwartete Ergebnisse: "Foo Bar Baz "Aktuelle Ergebnisse: "Foo Bar Baz"

Wenn ich das entferne[[UILabel appearance] setFont:] line dann klappt es:

"Foo Bar Baz "

(Die benutzerdefinierte Schriftart ist jedoch nicht für den Rest der Zeichenfolge festgelegt.)

Meine Frage lautet also: Gibt es eine Möglichkeit, eine einzelne Schriftart anzugeben, die als app-weite Standardschrift verwendet werden soll, die jedoch teilweise mit zugewiesenen Zeichenfolgen überschrieben werden kann?

Auch wenn mir jemand erklären kann, warum das nicht funktioniert, würde ich es begrüßen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage