Nadanie Framesetter poprawnej regulacji odstępów między wierszami
Kilka postów zauważyło trudności z uzyskaniem dokładnej wysokości z CTFramesetterSuggestFrameSizeWithConstraints i tutaj,(post framesetter), @Chris DeSalvo daje to, co wygląda jak ostateczna poprawka: dodaj ustawienie stylu akapitowego z poprawną regulacją odstępów między wierszami.
DeSalvo otrzymuje swoje „prowadzenie”, usuwając ascender i descender UIFont z jego lineHeight. Zastanawiałem się, jak by się to mogło równaćCTFontGetLeading
.
Pracowałem z czcionkami utworzonymi w ten sposób:
<code>CTFontRef fontr = CTFontCreateWithName((CFStringRef)@"Helvetica Neue", 16.0f, NULL); UIFont *font = [UIFont fontWithName:@"Helvetica Neue" size:16.0f]; </code>
Wartości były zupełnie inne:
0,448 CTFontGetLeading2.360 Wzór DeSalvo: UIFont lineHeight - ascender + descenderOto kilka innych wartości UIFont:
21 000 linii UIFont15.232 ascender UIFont (współrzędna Y od linii bazowej)-3.408 Zejście UIFont (współrzędna Y od linii bazowej)08.368 xHeight UIFontA oto wartości CTFont, o które pytał Ken Thomases:
11.568001 CTFontGetCapHeight08.368 CTFontGetXHeight-15.216001, -7.696001, 38.352001, 24.928001 CTFontGetBoundingBox15.232 CTFontGetAscent03.408 CTFontGetDescent (klasa ref mówi „skalowana metryka czcionka-zejście skalowana zgodnie z rozmiarem punktu i macierzą odniesienia czcionki” - co najwyraźniej oznacza, że jest to wartość bezwzględna współrzędnej Y z linii bazowej?)Zwracam uwagę, że UIFont wcześniej posiadał właściwość specjalnie do „prowadzenia”, ale została ona uznana za przestarzałą i zalecamy korzystanie z niejlineHeight
zamiast. Więc UIFont uważa prowadzenie za być21 i CTFontRef.448 za tę samą czcionkę? Cos jest nie tak.
Trzy pytania:
Czy „prowadzenie” naprawdę oznacza kCTParagraphStyleSpecifierLineSpacingAdjustment?Jeśli tak, jaką metodę / formułę należy użyć, aby ją uzyskać?Jeśli nie, co powinienem użyć do regulacji odstępów między wierszami?