4 Stimmen

Cocoa liefert die Breite der Zeichenkette in Pixeln aus der Schriftart

Ich versuche, die Breite einer Zeichenkette in Pixeln anhand der Schriftart und des Schriftgrads zu ermitteln. Ich verwende derzeit diesen Code, aber er funktioniert nicht zu 100 % der Zeit. Gibt es eine andere Möglichkeit, dies zu tun?

NSSize textSize = [aTextLayer.string sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:@"Bank Gothic Medium", NSFontNameAttribute, [NSNumber numberWithFloat:aTextLayer.fontSize], NSFontSizeAttribute, nil]];

0 Stimmen

Ich denke, es gibt Methoden dafür in NSAttributedString(AppKitAdditions) .

1 Stimmen

Es gibt keine "Breite in Pixeln". Pixel machen nur in einer Rasterumgebung Sinn, z. B. in einem Fenster- oder Bitmap-Kontext, und diese Pixel ändern sich nur, wenn Sie einen Vektor in den Kontext zeichnen, z. B. durch Zeichnen einer Zeichenfolge. Die Messung einer Zeichenkette gibt ihre Breite (und Höhe) in Punkte .

9voto

zneak Punkte 129366

NSAttributedString wird ein -size Methode durch die Application Kit Additions.

NSDictionary* attributes = [NSDictionary dictionaryWithObjectsAndKeys:
    @"Bank Gothic Medium", NSFontNameAttribute,
    [NSNumber numberWithFloat:aTextLayer.fontSize], NSFontSizeAttribute,
    nil];
NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:aTextLayer.string attributes:attributes];
NSSize size = attributedString.size;

1 Stimmen

Das hat das Problem nicht behoben. Es ändert sich immer noch nicht. Die fontSize wird von 10 auf 22 geändert, aber die Größe ist immer noch die gleiche...

0 Stimmen

Der beste Tipp aller Zeiten! Dankeschön!

4voto

AlBeebe Punkte 7953

Hier ist, was ich verwende, um die Größe einer Zeichenfolge zu erhalten...

NSSize size = [@"Some text" sizeWithAttributes:[NSDictionary dictionaryWithObject:[NSFont fontWithName:@"Helvetica Neue Bold" size:24.0f] forKey:NSFontAttributeName]];

HINWEIS: Wenn Sie die Zeichenfolge zu einem Textfeld hinzufügen, habe ich festgestellt, dass Sie etwa 10 zu size.width hinzufügen müssen, damit es passt.

1voto

Dave DeLong Punkte 240835

Versuchen Sie, die aktuelle NSFont (oder UIFont ), anstatt nur den Namen der Schriftart.

0 Stimmen

Die Dokumentation sagt NSFontNameAttribute ist "Eine optionale NSString Objekt, das den Schriftnamen angibt."

0 Stimmen

Unglaublich! Danke! Das wird tatsächlich einige andere Probleme beheben, die wir auch hatten!

0voto

RoyGal Punkte 176

Hier ist ein weiteres Beispiel:

NSString *test = [[NSString alloc] initWithFormat:@"%u:%u:%u.000", hours, minutes, seconds];
NSSize boundingSize = {100,300};  //I suppose this is the constraints?
NSRect boundingRect = [test boundingRectWithSize:boundingSize options:NULL attributes:stringAttributes];
point.x -= boundingRect.size.width; //This point points at the end of screen
[test drawAtPoint:point withAttributes:stringAttributes];

Hier ist für die stringAttributes, die Noobs wie mich helfen kann:

NSMutableDictionary *stringAttributes;
    stringAttributes = [NSMutableDictionary dictionary];
    [stringAttributes setObject:[NSFont fontWithName:@"Monaco" size:16] forKey:NSFontAttributeName];
    [stringAttributes setObject:[NSColor whiteColor] forKey:NSForegroundColorAttributeName];
    [stringAttributes setObject:[NSColor blackColor] forKey:NSBackgroundColorAttributeName];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X