Auf der Suche nach im Wesentlichen was auch immer das Cocoa-Äquivalent [UILabel adjustsFontSizeToFitWidth]
ist.Wie kann ich NSTextField mitteilen, dass es seine Schriftgröße automatisch an den Text anpassen soll?
Antwort
Ich verwendete Jerry Krinock ausgezeichnete NS (String) + Geometrics (located here) und eine kleine Methode wie folgt. Ich bin immer noch an einem einfacheren Weg interessiert.
- (void) prepTextField:(NSTextField *)field withString:(NSString *)string
{
#define kMaxFontSize 32.0f
#define kMinFontSize 6.0f
float fontSize = kMaxFontSize;
while (([string widthForHeight:[field frame].size.height font:[NSFont systemFontOfSize:fontSize]] > [field frame].size.width) && (fontSize > kMinFontSize))
{
fontSize--;
}
[field setFont:[NSFont systemFontOfSize:fontSize]];
[field setStringValue:string];
[self addSubview:field];
}
Vergessen Sie nicht, in Superklassen zu suchen. Ein NSTextField ist eine Art NSControl, und jedes NSControl reagiert auf the sizeToFit
message.
Ich habe es gelöst, indem Sie eine NSTextFieldCell-Unterklasse erstellen, die die Zeichenkette überschreibt. Es sieht aus, ob die Zeichenfolge passt und wenn nicht, wird die Schriftgröße verringert, bis sie passt. Dies könnte effizienter gemacht werden und ich habe keine Ahnung, wie es sich verhalten wird, wenn die cellFrame
eine Breite von 0 hat. Trotzdem war es gut genug für meine Bedürfnisse.
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSAttributedString *attributedString;
NSMutableAttributedString *mutableAttributedString;
NSSize stringSize;
NSRect drawRect;
attributedString = [self attributedStringValue];
stringSize = [attributedString size];
if (stringSize.width <= cellFrame.size.width) {
// String is already small enough. Skip sizing.
goto drawString;
}
mutableAttributedString = [attributedString mutableCopy];
while (stringSize.width > cellFrame.size.width) {
NSFont *font;
font = [mutableAttributedString
attribute:NSFontAttributeName
atIndex:0
effectiveRange:NULL
];
font = [NSFont
fontWithName:[font fontName]
size:[[[font fontDescriptor] objectForKey:NSFontSizeAttribute] floatValue] - 0.5
];
[mutableAttributedString
addAttribute:NSFontAttributeName
value:font
range:NSMakeRange(0, [mutableAttributedString length])
];
stringSize = [mutableAttributedString size];
}
attributedString = [mutableAttributedString autorelease];
drawString:
drawRect = cellFrame;
drawRect.size.height = stringSize.height;
drawRect.origin.y += (cellFrame.size.height - stringSize.height)/2;
[attributedString drawInRect:drawRect];
}
Damit die Schrift korrekt vertikal zentriert wird, wird die folgende Zeile direkt vor dem 'while' benötigt:' [mutableAttributedString removeAttribute: @ "NSOriginalFont" -Bereich: NSMakeRange (0, [mutableAttributedString length])]; ' – DarkDust
- 1. Schriftgröße automatisch anpassen
- 2. Wie NSTextField aussehen (Schriftart, Schriftgröße) in Cocoa anpassen?
- 3. Kann ich Windows mitteilen, dass es den Speicher bestimmter Prozesse nicht auslagern soll?
- 4. Text automatisch an die Breite einer Schaltfläche anpassen
- 5. Wie kann ich einem Steuerelement mitteilen, dass es sich nicht neu zeichnen soll?
- 6. Wie kann ich meiner Cocoa-Anwendung mitteilen, dass sie innerhalb der Anwendung selbst beendet werden soll?
- 7. Wie kann ich playframework mitteilen, dass mein Corporate Proxy verwendet werden soll?
- 8. Wie kann ich eine Textansicht erstellen, die automatisch die Schriftgröße an den Platz ändert?
- 9. JTable-Spalte automatisch an den Inhalt anpassen
- 10. Ändern Sie NSTextField Schriftgröße auf
- 11. Schriftgröße anpassen FPDF
- 12. Wie kann ich die Schriftgröße in iOS 7.0 oder höher automatisch anpassen?
- 13. Wie kann ich einem DataProvider mitteilen, dass er aktualisiert werden soll?
- 14. Wie ich Eclipse mitteilen kann, dass ich meine geschweifte Klammer nicht mehr rückwärts bewegen soll
- 15. Größe automatisch anpassen (Schriftgröße) beim Ändern der Fenstergröße?
- 16. Wie kann ich Devise sagen, dass es seine Ansichten in einem anderen Layout rendern soll?
- 17. Excel passt 45º Text nicht automatisch an
- 18. Wie kann man Angular mitteilen, dass es keine Null-Option geben soll?
- 19. Wie kann ich einem (verwalteten) Objekt mitteilen, dass es seine KVOs benachrichtigen soll, dass eine seiner Eigenschaften erneut zwischengespeichert werden muss?
- 20. Wie kann ich Visual Studio mitteilen, dass kein Feld im Designercode ausgefüllt werden soll?
- 21. Wie kann ich dem MinGW-Linker mitteilen, dass er nicht alle Symbole exportieren soll?
- 22. Wie kann ich Spring-Cache mitteilen, dass in @Cacheable-Annotation kein Nullwert zwischengespeichert werden soll
- 23. Wie kann ich meinem benutzerdefinierten FragmentPagerAdapter mitteilen, dass er meine Fragmente nicht mehr zerstören soll?
- 24. Wie kann ich Python mitteilen, wo das Paket abgelegt werden soll? Kann es mit virtualenv funktionieren?
- 25. Wie kann ich einem Python-Skript (cygwin) mitteilen, dass es in aktuellen (oder relativen) Verzeichnissen funktionieren soll?
- 26. Größe von TEXT anpassen an UITextView
- 27. Größe einer SKLabelNode Schriftgröße anpassen?
- 28. Wie soll ich meine Facebook-Seite anpassen?
- 29. Wie kann ich Eclipse mitteilen, dass die Inhaltshilfe automatisch angezeigt wird?
- 30. Wie kann ich den Mailbox Betreff anpassen?
Ich antwortete dies für jemand anderen. Sie können meine Antwort [hier] (http://stackoverflow.com/questions/2908704/get-nntextfield-contents-to-scale/2911982#2911982) sehen. – regulus6633