buscando esencialmente cualquiera que sea el equivalente de cacao de [UILabel adjustsFontSizeToFitWidth]
es.¿Cómo puedo decirle a NSTextField que aumente su tamaño de fuente para que se ajuste a su texto?
Respuesta
Utilicé la excelente cadena NS (atribuida) de Jerry Krinock + Geometrics (located here) y un pequeño método como el siguiente. Todavía estoy interesado en una forma más simple.
- (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];
}
No olvides buscar en superclases. Un NSTextField es una especie de NSControl, y cada NSControl responde al the sizeToFit
message.
Lo he resuelto creando una subclase NSTextFieldCell que anula el dibujo de la cadena. Se ve si la cadena se ajusta y si no disminuye el tamaño de la fuente hasta que encaje. Esto podría hacerse más eficiente y no tengo idea de cómo se comportará cuando el cellFrame
tenga un ancho de 0. Sin embargo, fue Good Enough ™ para mis necesidades.
- (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];
}
Para hacer que la fuente se centre verticalmente correctamente, se necesita la siguiente línea justo antes del rango 'while':' [mutableAttributedString removeAttribute: @ "NSOriginalFont": NSMakeRange (0, [mutableAttributedString length])]; ' – DarkDust
- 1. ¿Cómo puedo crear una vista de texto que cambie automáticamente su tamaño de fuente para que se ajuste al espacio?
- 2. Cambiar el tamaño de la entrada para que se ajuste a su contenido
- 3. ¿Cómo detener la reducción de Tkinter Frame para que se ajuste a su contenido?
- 4. Cómo puedo decirle a AngularJS que "actualice"
- 5. Cómo puedo evitar que el tamaño de fuente UITextfield se reduzca a medida que escribe
- 6. ¿Cómo puedo decirle a un ContextMenu que se coloque con relación a su control y no al cursor?
- 7. ¿Cómo escalar/cambiar el tamaño del texto para que se ajuste a un TextView?
- 8. Hacer que el cuadro de diálogo de la IU de JQuery aumente o disminuya automáticamente para ajustarse a su contenido
- 9. cómo decirle a gradle que descargue todos los archivos fuente
- 10. Cómo redimensionar automáticamente el tamaño de la fuente para que se ajuste al alto/ancho del cuadro de texto?
- 11. ¿Cómo hacer que FigureCanvas se ajuste a un panel?
- 12. iTextSharp: ¿Cómo cambiar el tamaño de una imagen para que se ajuste a un tamaño fijo?
- 13. ¿Cómo obtener un div para cambiar el tamaño de su altura para que se ajuste al contenedor?
- 14. ¿Cómo puedo decirle a poedit que ignore los errores de texto que no son ASCII?
- 15. ¿Es posible cambiar el tamaño del texto para que se ajuste a un div de tamaño fijo?
- 16. CATextlayer cambia el tamaño de la FUENTE para que se ajuste al marco
- 17. ¿Cómo puedo decirle a ProGuard que mantenga mi función que se usa para onClick?
- 18. ¿Cómo puedo obtener imágenes en XAML para que se muestren como su tamaño real?
- 19. ¿Cómo puedo garantizar que un DIV se extienda para ajustarse a su contenido?
- 20. ¿Cómo cambiar el tamaño de la imagen para que se ajuste a la celda UITableView?
- 21. Evite que una vista de texto multilínea se expanda innecesariamente a su ancho máximo
- 22. ¿Cómo puedo decirle a la clase heredada que no llame al constructor sin parámetros de su clase base?
- 23. ¿Cómo puedo colocar una imagen en un recuadro de manera que se ajuste exactamente a su ancho o alto, lo que sea más pequeño?
- 24. Cambiar el tamaño del panel para que se ajuste a los elementos de las ventanas
- 25. ¿Cómo decirle a .hover() que espere?
- 26. Cómo engañar a Windows para que piense que su aplicación aún está ocupada, aunque no responde
- 27. Cómo crear un proceso que sobrevive a su matriz
- 28. Cómo cambiar el tamaño de un botón según su texto
- 29. ¿Cómo puedo decirle a Struts2 que no valide un formulario la primera vez que se muestra?
- 30. ¿Cómo decirle a NLog que registre excepciones?
He respondido esto por otra persona. Puedes ver mi respuesta [aquí] (http://stackoverflow.com/questions/2908704/get-nstextfield-contents-to-scale/2911982#2911982). – regulus6633