NSAttributedString informando tamaños incorrectos para UITextView sizeThatFits y boundingRectWithSize con el conjunto de opciones correcto

Tengo una NSAttributedString que informa de un límiteRectWithSize (y, por extensión, una UITextView que calcula incorrectamente su sizeThatFits) cuando el tamaño de fuente se reduce del tamaño de fuente que se utilizó para crearlo.

No sucede en todas las cadenas NSAttributedStrings para las que realizo operaciones similares, así que aquí están los pasos para reproducir.

Utilice una fuente no estándar que no incluya el conjunto completo de caracteres Unicode.Asegúrese de que la cadena incluya caracteres en este conjunto "no compatible". iOS los representará como Helvetica en el tamaño adecuado.Reduzca la fuente en todos los atributos de fuente en su NSAttributedString. Mi código para hacerlo que produjo el problema se ve así.

Desde dentro de una subclase UITextView:

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];

Noté que mientras ejecutaba este código en unwhile tamaño de comprobación de bucle Se ajusta para saber cuándo el texto es lo suficientemente pequeño como para ajustarse y que, en algunas circunstancias, ocurriría una carrera hacia cero. La altura se calcula como 60px para cualquier valor de fuente más pequeño que el que comencé, que resulta ser 50px.

CuandoNSLogAl usar NSAttributedString, encuentro que hay varios atributos que no agregué con la claveNSOriginalFont que no parece estar en la lista de atributos admitidosaquí. ¿Qué está pasando con NSOriginalFont? ¿Por qué mi talla se calcula incorrectamente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta