CTFramesetterSuggestFrameSizeWithconstraints manchmal gibt falsche Größe?
Im code unten CTFramesetterSuggestFrameSizeWithConstraints
auch mal wieder ein CGSize
mit einer Höhe, die nicht groß genug, um enthalten alle den text, wird an Sie übergeben. Ich habe mir diese Antwort. Aber in meinem Fall die Breite des Textfeldes muss konstant sein. Gibt es einen anderen/besseren Weg, um herauszufinden, die richtige Höhe für meine zurückgeführt string? Danke!
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attributedString);
CGSize tmpSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0,0), NULL, CGSizeMake(self.view.bounds.size.width, CGFLOAT_MAX), NULL);
CGSize textBoxSize = CGSizeMake((int)tmpSize.width + 1, (int)tmpSize.height + 1);
- jeder Fortschritt auf diesem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
CTFramesetterSuggestFrameSizeWithConstraints()
ist gebrochen. Ich reichte ein Fehler auf diese eine Weile zurück. Ihre alternative ist die VerwendungCTFramesetterCreateFrame()
mit einem Pfad, der ausreichend hoch ist. Dann Messen Sie die rect-der CTFrame, dass Sie wieder zu bekommen. Beachten Sie, dass Sie nicht verwenden könnenCGFLOAT_MAX
für die Höhe, als CoreText verwendet umgedreht Koordinatensystem aus dem iPhone und suchen Sie Ihren text an die "Spitze" der box. Dies bedeutet, dass wenn SieCGFLOAT_MAX
Sie haben nicht genug Präzision, um wirklich sagen, die Höhe der box. Ich empfehlen, mit so etwas wie 10.000 als Ihre Höhe, wie das ist 10x größer als der Bildschirm selbst und gibt noch genügend Genauigkeit für die resultierende Rechteck. Wenn Sie brauchen, um das Layout noch größer text, Sie können dies tun, mehrere Male, für jeden Abschnitt von text (Sie können Fragen, CTFrameRef für den Bereich in der ursprünglichen Zeichenfolge, die es konnte, lay-out).CTFramesetterSuggestFrameSizeWithconstraints richtig funktioniert. Der Grund, dass Sie eine Höhe, die zu kurz ist, weil der führende in der Standard-Absatz-Stil angebracht zugeschrieben strings. Wenn Sie nicht fügen Sie einen Absatz Stil, um den string dann CoreText gibt die Höhe erforderlich, damit der text, aber ohne Leerzeichen zwischen den Zeilen. Dies hat mich für immer, um herauszufinden. Nichts in der Dokumentation buchstabiert es aus. Ich bin nur zufällig zu bemerken, dass meine Höhen wurden kurz durch einen Betrag in der Höhe (Anzahl der Zeilen x erwartete führenden). Um die Höhe Ergebnis, das Sie erwarten, können Sie code wie den folgenden verwenden:
CFAttributedStringSetAttributes
ab und geben KEINE fürclearOtherAttributes
Danke an Chris DeSalvo für die gute Antwort! Schließlich 16 Stunden Debuggen. Ich hatte ein wenig Mühe, herauszufinden, die Swift 3-syntax. So teilt der Swift 3-version von Einstellung im Absatzformat.
Ich endlich herausfinden.. Wenn verwendet CTFramesetterSuggestFrameSizeWithconstraints Rückkehr CGSize zum zeichnen von text, die Größe ist nicht groß genug(manchmal) auf den gesamten text, also Letzte Zeile ist nicht drew.. ich habe nur noch 1 Größe.Höhe für die Rückkehr, es erscheint zu sein gerade jetzt.
Etwas wie dieses:
suggestedSize = CGSizeMake(suggestedSize.Breite, suggestedSize.Höhe + 1);