Wie zeichne ich eine Zeichenkette ohne Ränder in einer Ansicht?

9

Ich habe Probleme beim Zeichnen eines NSAttributedString ohne Ränder in seiner Ansicht. Hier ist mein Code:

%Vor%

Dies führt zu dem folgenden Verhalten:

Beachten Sie die Ränder links und oben.

  1. Wie kann ich diese Ränder vermeiden und den Text exakt an die Kanten der umgebenden Ansicht anpassen? Ich möchte, dass der tatsächlich gezeichnete Text die Kanten der Ansicht trifft, das heißt, das oberste Pixel, das in einer beliebigen Glyphe gezeichnet wird, sollte sich oben in der Ansicht befinden, und das linke Pixel in einer beliebigen Glyphe befindet sich auf der linken Seite die Aussicht.
  2. Angenommen, 1 ist möglich, gibt es eine Möglichkeit, die tatsächliche Breite und Höhe des gezeichneten Textes zu erhalten, so dass ich Schriftgröße und Kerning berechnen kann, damit der Text auch den unteren und rechten Rand erreicht?

Ich stelle fest, dass es Möglichkeiten gibt, Text auszurichten, ohne dass er den Kanten der Ansicht entspricht, aber wenn er die Ränder der Ansicht trifft, kann ich intuitiv mit der Ansicht arbeiten, indem ich automatisches Layout usw. benutze.

>

Ich interessiere mich nicht für das Verhalten, wenn die Zeichenfolge führende oder nachfolgende Leerzeichen enthält.

Wenn dies mit NSAttributedString nicht möglich ist, gibt es andere Möglichkeiten, dieses Verhalten zu erhalten, das Sie empfehlen würden?

Um klarzustellen, hier ist, was ich für Nummer 1 sehen möchte.

    
Luke 31.05.2015, 18:53
quelle

3 Antworten

5

Sie können die Werte für Höhe, Breite und Vektor mit CoreText erhalten:

%Vor%

damit du die richtige bekommen kannst. Aber der obere Rand ist nicht falsch

    
maquanhong 10.06.2015 16:05
quelle
3

Verwenden Sie CoreText, CTLineGetTypographicBounds () ist wahrscheinlich, was Sie suchen. Ich habe das selbst nicht benutzt. Der folgende Code demonstriert die Idee ("Hello" zu einer benutzerdefinierten UIView ohne oberen / linken Rand zeichnen).

%Vor%     
Joe Smith 31.05.2015 19:41
quelle
1

Probieren Sie es aus.

%Vor%     
user1988 05.06.2015 12:16
quelle