J'ai examiné plusieurs questions Stackoverflow où les gens ont des problèmes avec boundingRectWithSize, mais aucun d'eux n'est vraiment mon problème.boundingRectWithSize retourne parfois une hauteur qui est d'environ 1 ligne trop grande
Le code suivant calcule souvent une hauteur de 1 ligne de texte trop grande.
CGFloat height = [label.attributedText
boundingRectWithSize:CGSizeMake(label.width, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
context:nil].size.height;
Par exemple, la chaîne Type de carte USGS Topo est à peu près la moitié de la largeur de mon point de vue et devrait être de 1 ligne haute (~ 18 pixels), mais finit par avoir une hauteur de 2 lignes (~ 36 pixels):
J'ai aussi essayé le calcul de la hauteur à l'aide du NSString au lieu de NSAttributedString, mais la même chose:
CGFloat height = [[label.attributedText string]
boundingRectWithSize:CGSizeMake(label.width, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:TITLE_FONT}
context:nil].size.height;
Vous pouvez voir dans cette capture d'écran que les 3 étiquettes en bas finissent taille correctement , mais pas les deux premiers. Je me suis tourné sur les étiquettes de couleurs mélangées dans le simulateur iOS de sorte que les sous-vues seront colorés pour illustrer:
Pas certain que c'est la cause, mais notez que les deux chaînes supérieures comprennent des caractères qui sont dessinés en dessous de la ligne de base ('p' et' y' dans la chaîne supérieure, '(' et ')' dans le suivant) tandis que les trois autres ne le font pas. – ravron
@ravron Ouais, j'avais remarqué cela aussi, mais j'ai essayé de changer les caractères en-dessous de la ligne de base et j'ai eu le même résultat. –
Le problème persiste-t-il avec une police standard? J'ai eu des problèmes avec les polices qui ont des valeurs bancales qui ne sont pas évidentes en les regardant. – ravron