Tengo un UILabel que muestra algunos caracteres. Como "x", "y" o "rpm". ¿Cómo puedo calcular el ancho del texto en la etiqueta (no indica todo el espacio disponible)? Esto es para el diseño automático, donde otra vista tendrá un rectángulo más grande si UILabel tiene un texto más pequeño dentro. ¿Existen métodos para calcular el ancho del texto cuando se especifica un UIFont y un tamaño de fuente? Tampoco hay salto de línea y solo una línea.¿Cómo calcular el ancho de una cadena de texto de una fuente específica y tamaño de fuente?
Respuesta
Puede hacer exactamente eso a través de los diversos métodos sizeWithFont:
en NSString UIKit Additions. En su caso la variante más simple debería ser suficiente (ya que no dispone de etiquetas de múltiples líneas):
NSString *someString = @"Hello World";
UIFont *yourFont = // [UIFont ...]
CGSize stringBoundingBox = [someString sizeWithFont:yourFont];
Hay varias variaciones de este método, por ejemplo. algunos consideran modos de salto de línea o tamaños máximos.
¿No debería ser UIFont * yourFont = // [UIFont ...]; ¿aunque? – PinkFloydRocks
Vaya, sí, claro ... Reparado. –
"sizeWithFont:" está en desuso. La respuesta de wcochran debería ser la marcada. –
Desde sizeWithFont
es obsoleto, sólo voy a actualizar mi respuesta original a la utilización de Swift 4 y .size
//: Playground - noun: a place where people can play
import UIKit
if let font = UIFont(name: "Helvetica", size: 24) {
let fontAttributes = [NSAttributedStringKey.font: font]
let myText = "Your Text Here"
let size = (myText as NSString).size(withAttributes: fontAttributes)
}
El tamaño debe ser el tamaño de la pantalla de "su texto aquí" en puntos.
sizeWithFont:
ahora es obsoleto, utilice sizeWithAttributes:
lugar:
UIFont *font = [UIFont fontWithName:@"Helvetica" size:30];
NSDictionary *userAttributes = @{NSFontAttributeName: font,
NSForegroundColorAttributeName: [UIColor blackColor]};
NSString *text = @"hello";
...
const CGSize textSize = [text sizeWithAttributes: userAttributes];
Nota: el método 'sizeWithAttributes:' devuelve tamaños fraccionarios; para usar una vista de tamaño devuelto a tamaño, debe elevar su valor al número entero más alto más cercano utilizando la función ceil. – Allen
Esto es para SWIFT 2.3 Versión. Puedes obtener el ancho de la cuerda.
var sizeOfString = CGSize()
if let font = UIFont(name: "Helvetica", size: 14.0)
{
let finalDate = "Your Text Here"
let fontAttributes = [NSFontAttributeName: font] // it says name, but a UIFont works
sizeOfString = (finalDate as NSString).sizeWithAttributes(fontAttributes)
}
Basado en Glenn Howes' excellent answer, creé una extensión para calcular el ancho de una cadena. Si está haciendo algo como establecer el ancho de UISegmentedControl
, esto puede establecer el ancho según la cadena de título del segmento.
extension String {
func widthOfString(usingFont font: UIFont) -> CGFloat {
let fontAttributes = [NSFontAttributeName: font]
let size = self.size(attributes: fontAttributes)
return size.width
}
func heightOfString(usingFont font: UIFont) -> CGFloat {
let fontAttributes = [NSFontAttributeName: font]
let size = self.size(attributes: fontAttributes)
return size.height
}
}
uso:
// Set width of segmentedControl
let starString = "⭐️"
let starWidth = starString.widthOfString(usingFont: UIFont.systemFont(ofSize: 14)) + 16
segmentedController.setWidth(starWidth, forSegmentAt: 3)
Swift 4
func widthOfString(usingFont font: UIFont) -> CGFloat {
let fontAttributes = [NSAttributedStringKey.font: font]
let size = self.size(withAttributes: fontAttributes)
return size.width
}
func heightOfString(usingFont font: UIFont) -> CGFloat {
let fontAttributes = [NSAttributedStringKey.font: font]
let size = self.size(withAttributes: fontAttributes)
return size.height
}
func sizeOfString(usingFont font: UIFont) -> CGSize {
let fontAttributes = [NSAttributedStringKey.font: font]
return self.size(withAttributes: fontAttributes)
}
Este simple extensión en Swift funciona bien.
extension String {
func size(OfFont font: UIFont) -> CGSize {
return (self as NSString).size(attributes: [NSFontAttributeName: font])
}
}
Uso:
let string = "hello world!"
let font = UIFont.systemFont(ofSize: 12)
let width = string.size(OfFont: font).width // size: {w: 98.912 h: 14.32}
Para Swift 3.0+
extension String {
func SizeOf_String(font: UIFont) -> CGSize {
let fontAttribute = [NSFontAttributeName: font]
let size = self.size(attributes: fontAttribute) // for Single Line
return size;
}
}
Se usa como ...
let Str = "ABCDEF"
let Font = UIFont.systemFontOfSize(19.0)
let SizeOfString = Str.SizeOfString(font: Font!)
para SWIFT 4.2
func SizeOf_String(font: UIFont) -> CGSize {
let fontAttribute = [NSAttributedStringKey.font: font]
let size = self.size(withAttributes: fontAttribute) // for Single Line
return size;
}
No
probado todavía ...
- 1. ¿Cómo calcular el ancho de la fuente?
- 2. Cómo determinar el tamaño de una cadena dada una fuente
- 3. Android y calculando el tamaño de una cadena de una línea en una fuente y tamaño de letra determinados?
- 4. ¿Cómo cambiar la fuente y el tamaño de fuente de una etiqueta de entrada HTML?
- 5. Calcular el ancho de visualización de una cadena en C#?
- 6. Calcular el ancho de visualización de una cadena en Java
- 7. ¿Cómo establecer el ancho de la fuente en una vista de texto de Android?
- 8. tamaño del texto de la fuente
- 9. configuración de fuente y tamaño de fuente del texto de la barra de título de una UITableViewController
- 10. ¿Cómo se calcula el ancho de la fuente de cadena en píxeles?
- 11. Cómo crear una fuente con + fontWithName: tamaño: y especifique el nombre de la familia de la fuente y la información de estilo específico para la fuente?
- 12. Ajustar el tamaño de fuente FPDF
- 13. ¿Cómo cambiar el tamaño de fuente del gráfico de Google?
- 14. Zend_Pdf calcular la longitud de la cadena de texto en la fuente actual para el ajuste de línea
- 15. ¿Cómo se cambia el tamaño de fuente y el color de fuente de un archivo Java?
- 16. ¿Cómo puedo obtener el tamaño de fuente y el nombre de la fuente de un UILabel?
- 17. Determinar el tamaño de etiqueta en función de la cantidad de texto y el tamaño de fuente en Winforms/C#
- 18. ¿Cómo adaptar el tamaño de fuente a div-size?
- 19. Java: Obtener una fuente con una altura específica en píxeles
- 20. Calcular el ancho del texto con PHP GD
- 21. ¿Cómo puedo aumentar el tamaño de fuente en función del ancho de la ventana?
- 22. TinyMCE tamaño de fuente predeterminado
- 23. UITextField mínimo tamaño de fuente
- 24. cambiar el tamaño del texto (tamaño de fuente) al cambiar el tamaño de la ventana?
- 25. Calcular la altura del texto en función del ancho y la fuente disponibles?
- 26. Cómo calcular el número de líneas de código fuente
- 27. Calcular con precisión el ancho del texto en unidades métricas
- 28. centrado de texto de gran tamaño de fuente en TextView
- 29. ¿Cómo puedo establecer el tamaño de fuente de UITextView?
- 30. Calcular el tamaño del texto de acuerdo con el ancho del área de texto
No sé cómo podría hacer esto con cualquier tipo de fuente, sin embargo, si está utilizando una fuente de ancho fijo, se puede calcular utilizando el número de caracteres . No estoy del todo seguro de la fórmula. – jgallant