Tamaño de UILabel incorrecto para una sola línea de text con lineSpacing y múltiples colors

Estoy bastante seguro de que esto es en realidad un error de UIKit, pero quiero get alguna información para ver si me falta algo tonto aquí.

Aquí está el código que tengo:

// single line with modified line spacing and 2 colors - broken, line spacing is added to the bottom! UILabel *brokenLabel = [[UILabel alloc] init]; brokenLabel.backgroundColor = [UIColor greenColor]; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"Just some text"]; [attributedString addAttributes:@{NSForegroundColorAttributeName : [UIColor networkingColor]} range:[attributedString.string rangeOfString:@"text"]]; attributedString = attributedStringFromAttributedStringWithLineSpacing(attributedString, 20, NSTextAlignmentCenter); brokenLabel.attributedText = attributedString; [brokenLabel sizeToFit]; brokenLabel.frame = CGRectOffset(brokenLabel.frame, 50, 100); [self.view addSubview:brokenLabel]; // end // single line with modified line spacing and 1 color - correct UILabel *workingLabel = [[UILabel alloc] init]; workingLabel.backgroundColor = [UIColor greenColor]; attributedString = [[NSMutableAttributedString alloc] initWithString:@"Just some text"]; attributedString = attributedStringFromAttributedStringWithLineSpacing(attributedString, 20, NSTextAlignmentCenter); workingLabel.attributedText = attributedString; [workingLabel sizeToFit]; workingLabel.frame = CGRectOffset(workingLabel.frame, 200, 100); [self.view addSubview:workingLabel]; //end // multiple lines with modified line spacing and 1 color - correct UILabel *workingLabel2 = [[UILabel alloc] init]; workingLabel2.frame = CGRectMake(0, 0, 100, 0); workingLabel2.numberOfLines = 0; workingLabel2.backgroundColor = [UIColor greenColor]; attributedString = [[NSMutableAttributedString alloc] initWithString:@"Just some text"]; attributedString = attributedStringFromAttributedStringWithLineSpacing(attributedString, 20, NSTextAlignmentCenter); workingLabel2.attributedText = attributedString; [workingLabel2 sizeToFit]; workingLabel2.frame = CGRectOffset(workingLabel2.frame, 50, 300); [self.view addSubview:workingLabel2]; //end // multiple lines with modified line spacing and 2 color - correct UILabel *workingLabel3 = [[UILabel alloc] init]; workingLabel3.frame = CGRectMake(0, 0, 100, 0); workingLabel3.numberOfLines = 0; workingLabel3.backgroundColor = [UIColor greenColor]; attributedString = [[NSMutableAttributedString alloc] initWithString:@"Just some text"]; [attributedString addAttributes:@{NSForegroundColorAttributeName : [UIColor networkingColor]} range:[attributedString.string rangeOfString:@"text"]]; attributedString = attributedStringFromAttributedStringWithLineSpacing(attributedString, 20, NSTextAlignmentCenter); workingLabel3.attributedText = attributedString; [workingLabel3 sizeToFit]; workingLabel3.frame = CGRectOffset(workingLabel3.frame, 200, 300); [self.view addSubview:workingLabel3]; 

junto con una simple function de conveniencia para cambiar la lineSpacing de lineSpacing de una cadena atribuida:

 NSMutableAttributedString *attributedStringFromAttributedStringWithLineSpacing(NSAttributedString *string, CGFloat lineSpacing, NSTextAlignment textAlignment) { NSMutableAttributedString *mutable = string.mutableCopy; NSMutableParagraphStyle *par = [NSMutableParagraphStyle new]; par.alignment = textAlignment; par.lineSpacing = lineSpacing; [mutable addAttributes:@{NSParagraphStyleAttributeName : par} range:NSMakeRange(0, mutable.length)]; return mutable; } 

Sin embargo, esto es lo que parece

imagen

Como puede ver, la altura de la primera label es demasiado grande (o la altura que debería ser + mi espaciado de línea personalizado, para ser preciso). Cuando simplemente agregue otro color a la primera cadena atribuida, hace que el tamaño sizeToFit aumente agregando la línea de lineSpacing debajo de ella. También intenté usar los methods boundingRectWithSize: en las cadenas directamente y el mismo problema es visible. Entonces, esto no es específico del código de tamaño de la label, pero es un problema con las cadenas mismas. No veo ninguna razón posible por la que esto debería estar sucediendo. ¿Alguien tiene alguna idea?

En su dictionary de attributes, agregue

  [attrDic setObject:@0 forKey:NSBaselineOffsetAttributeName];