Quelle est exactement la taille de sharepoint UIFont?

J’ai du mal à comprendre exactement ce que signifie la taille des points dans UIFont . Ce ne sont pas des pixels et cela ne semble pas être la définition standard du point, c’est-à-dire qu’ils se rapportent au 1 / 72ème de pouce.

J’ai travaillé sur la taille de pixel en utilisant -[NSSsortingng sizeWithFont:] des fonts de différentes tailles et a obtenu ce qui suit:

 | Point Size | Pixel Size | | ---------- | ---------- | | 10.0 | 13.0 | | 20.0 | 24.0 | | 30.0 | 36.0 | | 40.0 | 47.0 | | 50.0 | 59.0 | | 72.0 | 84.0 | | 99.0 | 115.0 | | 100.0 | 116.0 | 

(J’ai fait [@"A" sizeWithFont:[UIFont systemFontOfSize:theSize]] )

Et en regardant la taille de 72.0 points, ce n’est pas 1 pouce, car il est sur un périphérique avec un DPI de 163, donc 1 pouce serait de 163,0 pixels, non?

Quelqu’un peut-il expliquer ce qu’est un “point” dans les termes UIFont alors? Est-ce que ma méthode est au-dessus de la bonne et si vraiment j’ai utilisé quelque chose d’autre, je verrais quelque chose à propos de la police à 163 pixels à 72 points? Ou est-ce purement qu’un point soit défini à partir de quelque chose d’autre?

Une police a un système de coordonnées interne, considérez-le comme un carré unitaire, dans lequel les coordonnées vectorielles d’un glyphe sont spécifiées quelle que soit la taille arbitraire qui correspond à tous les glyphes de la police +.

À 72,0 points, le carré d’unité de la police est d’un pouce. Le glyphe x de la police y a une taille arbitraire par rapport à ce carré carré. Ainsi, un concepteur de fonts peut créer une police qui semble grande ou petite par rapport aux autres fonts. Cela fait partie du “caractère” de la police.

Ainsi, dessiner un «A» à 72 points vous indique qu’il sera deux fois plus élevé qu’un «A» dessiné à 36 points dans la même police – et absolument rien de ce que sera la taille réelle du bitmap.

C’est-à-dire que pour une police donnée, le seul moyen de déterminer la relation entre la taille des points et les pixels est de le mesurer.

Je ne sais pas comment -[NSSsortingng sizeWithFont:] mesure la hauteur. Utilise-t-il la hauteur de la ligne ou la différence entre les sumts des beziers? Quel texte as-tu utilisé?

Je crois -[UIFont lineHeight] serait préférable de mesurer la hauteur.

Edit: Notez également qu’aucune des méthodes de mesure ne renvoie la taille en pixels. Il renvoie la taille en points . Vous devez multiplier le résultat par [UIScreen mainScreen].scale .

Notez la différence entre typographic points utilisés lors de la construction de la police et les points de default logical coordinate space iOS default logical coordinate space . Malheureusement, la différence n’est pas expliquée très clairement dans la documentation.

Je me suis d’abord demandé si cela avait quelque chose à voir avec la façon dont [les pixels CSS sont définis à 96 par pouce] [1] alors que les points de mise en page de l’interface utilisateur sont définis à 72 par pouce. (Où, bien sûr, un “pouce” n’a rien à voir avec un pouce physique). Eh bien, vous pouvez noter lors de l’examen des traces de stack dans le débogueur ou des rapports d’erreur qu’il existe un code WebKit sous-jacent à beaucoup d’UIKit, même lorsque vous n’utilisez pas UIWebView . En réalité, c’est plus simple que cela.

Tout d’abord, la taille de la police est mesurée du plus bas au plus haut ascendeur en texte latin régulier – par exemple du bas du “j” au haut du “k”, ou pour une mesure pratique dans un seul caractère, la hauteur de “ƒ” (C’est U + 0192 “LETTRE MINUSCULE LATINE F AVEC CROCHET”, facilement tapé avec l’option -F sur un clavier Mac US. Les gens l’utilisaient pour abréger “dossier” à un moment donné.) la hauteur en pixels (sur un écran 1x) correspond à la taille de police spécifiée – par exemple, avec [UIFont systemFontOfSize:14] , “ƒ” aura une hauteur de 14 pixels. (La mesure du capital “A” ne tient compte que d’une partie arbitraire de l’espace mesuré en taille de police. Cette partie peut changer à des tailles de police plus petites; lorsque les vecteurs sont rendus aux pixels, l’indication modifie les résultats pour produire un texte plus lisible. .)

Cependant, les fonts contiennent toutes sortes de glyphes qui ne rentrent pas dans l’espace défini par cette mésortingque. Il y a des lettres avec des signes diacritiques au-dessus d’un ascendeur dans les langues d’Europe orientale, et toutes sortes de signes de ponctuation et de caractères spéciaux qui entrent dans une “boîte de mise en page” beaucoup plus grande. (Voir la section Symboles mathématiques dans la fenêtre Caractères spéciaux de Mac OS X pour de nombreux exemples.)

Dans le CGSize renvoyé par -[NSSsortingng sizeWithFont:] , la largeur représente les caractères spécifiques de la chaîne, mais la hauteur ne reflète que le nombre de lignes. La hauteur de ligne est une mésortingque spécifiée par la police et liée à la “zone de présentation” englobant les caractères les plus grands de la police.

Je suis d’accord que c’est très déroutant. J’essaie de vous donner quelques explications de base pour rendre les choses plus claires.

Tout d’abord, le DPI (point par pouce) provient de l’impression, sur des papiers physiques. Ainsi fait la police. Le point d’unité a été inventé pour décrire la taille d’impression physique du texte, simplement parce que inch est trop grand pour les tailles de texte habituelles. Ensuite, les gens ont inventé le point, c’est-à-dire la longueur de 1/72 pouce (effectivement évolué dans l’histoire), pour décrire facilement la taille du texte. Donc, oui, si vous écrivez un document dans Word ou un autre logiciel de traitement de texte pour l’impression, vous obtiendrez un texte d’une hauteur d’un pouce si vous utilisez la police 72pt.

Deuxièmement, la hauteur de texte théorique est généralement différente de celle des traits que vous pouvez réellement voir. L’idée originale de hauteur de texte provient des glyphes utilisés pour l’impression. Toutes les lettres sont gravées sur des blocs de glyphes qui partagent la même hauteur, ce qui correspond à la hauteur du sharepoint la police. Cependant, en fonction de différentes lettres et de différentes formes de police, la partie visible du texte peut être légèrement plus courte que la hauteur théorique. Helvetica Neue est en fait très standard. Si vous mesurez le haut d’une lettre “k” au bas d’une lettre “p”, elle correspondra à la hauteur de la police.

Troisièmement, l’affichage de l’ordinateur a foiré DPI, ainsi que la définition du point en même temps. La résolution des écrans d’ordinateur est décrite par leurs pixels natifs, tels que 1024 x 768 ou 1920 x 1080. Le logiciel ne prend pas en compte la taille physique de vos moniteurs, car tout serait très flou s’ils redimensionnaient l’écran comme l’impression sur papier. – Seule la résolution physique n’est pas assez élevée pour que tout soit lisse et légitime. Le logiciel utilise une méthode très simple et sans repères: Correction du DPI pour n’importe quel moniteur que vous utilisez. Pour Windows, c’est 96DPI; pour Mac, c’est 72DPI. Cela dit, peu importe combien de pixels font un pouce sur votre moniteur, le logiciel l’ignore. Lorsque le système d’exploitation restitue du texte en 72pt, il serait toujours à 96px de haut sur Windows et à 72px de haut sur Mac. (C’est pourquoi les documents Microsoft Word ont toujours l’air plus petits sur Mac et vous avez généralement besoin d’un zoom de 125%.)

Enfin, sur iOS, c’est très similaire, peu importe l’iPhone, l’iPod touch, l’iPad ou l’Apple Watch, iOS utilise un écran fixe de 72DPI pour la rétine, 144DPI pour la rétine 2×2 et 216DPI pour l’iPhone 6. Plus.

Oubliez le vrai pouce. Il n’existe que sur l’impression réelle, pas pour l’affichage. Pour les logiciels affichant du texte sur votre écran, il ne s’agit que d’un rapport artificiel aux pixels physiques.

La vérité, autant que j’ai pu le constater, est que UIFont ment. Tout UIKit prend des libertés avec les fonts. Si vous voulez la vérité, vous devez utiliser CoreText , mais dans beaucoup de cas, ce sera plus lent! (Donc, dans le cas de votre table de hauteur de pixel, je pense que cela ajoute une sorte de facteur + bx où x est la taille du point.

Alors, pourquoi fait-il cela? La vitesse! UIKit arrondit les choses et sortingcote avec l’espacement pour qu’il puisse mettre en cache les bitmaps. Ou du moins c’était ma prise!