NSAttributedString meldet falsche Größen für UITextView sizeThatFits und boundingRectWithSize, wobei die richtigen Optionen festgelegt sind

Ich habe ein NSAttributedString, das ein boundingRectWithSize (und als Erweiterung ein UITextView, das seine sizeThatFits falsch berechnet) meldet, wenn die Schriftgröße von der Schriftgröße verringert wird, die verwendet wurde, um es zu erstellen.

Es passiert nicht bei allen NSAttributedStrings, für die ich ähnliche Vorgänge durchführe.

Verwenden Sie eine nicht standardmäßige Schriftart, die nicht den vollständigen Unicode-Zeichensatz enthält.Stellen Sie sicher, dass die Zeichenfolge Zeichen in diesem "nicht unterstützten" Satz enthält. iOS rendert sie als Helvetica in der richtigen Größe.Verkleinern Sie Ihre Schrift in allen Schriftattributen in Ihrem NSAttributedString. Mein Code dafür, der das Problem verursacht hat, sieht folgendermaßen aus.

In einer UITextView-Unterklasse:

NSMutableAttributedString *mutableString = [self.attributedText mutableCopy];
[mutableString enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, mutableString.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
    if (value) {
        UIFont *oldFont = (UIFont *)value;
        UIFont *newFont = [oldFont fontWithSize:oldFont.pointSize - 1];
        [mutableString removeAttribute:NSFontAttributeName range:range];
        [mutableString addAttribute:NSFontAttributeName value:newFont range:range];
    }
}];
self.attributedText = [mutableString copy];

Mir ist aufgefallen, dass beim Ausführen dieses Codes in awhile loop checking sizeThatPasst zu wissen, wann der Text klein genug ist, um zu passen, dass unter bestimmten Umständen ein Wettlauf gegen Null stattfinden würde. Die Höhe wird mit 60px für jeden Schriftwert berechnet, der kleiner ist als der Wert, mit dem ich begonnen habe, was zufällig 50px ist.

WannNSLogBeim Ausführen des NSAttributedString stelle ich fest, dass es mehrere Attribute gibt, die ich nicht mit dem Schlüssel hinzugefügt habeNSOriginalFont Das scheint nicht in der Liste der unterstützten Attribute zu seinHier. Was ist los mit NSOriginalFont? Warum wird meine Größe falsch berechnet?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage