es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener el rango del texto atribuido que puede ajustarse en un textview de tamaño constante.

Estoy tratando de determinar la cantidad de texto atribuido que puede caber en el textview de tamaño constante. He intentado con CTFrameSetter, pero creo que solo es útil cuando ya conocemos el texto que queremos añadir.
Hasta ahora he intentado esto:

func numberOfCharactersThatFitTextView() -> Int {
    let fontRef = CTFontCreateWithName(font!.fontName as CFString, font!.pointSize, nil)
    let attributes = [kCTFontAttributeName : fontRef]
    let attributedString = NSAttributedString(string: text!, attributes: attributes as [NSAttributedString.Key : Any])
    let frameSetterRef = CTFramesetterCreateWithAttributedString(attributedString as CFAttributedString)

    var characterFitRange: CFRange = CFRange()

    CTFramesetterSuggestFrameSizeWithConstraints(frameSetterRef, CFRangeMake(0, 0), nil, CGSize(width: bounds.size.width, height: bounds.size.height), &characterFitRange)
    return Int(characterFitRange.length)

}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Esta función utiliza CTFontCreateWithName para crear una referencia de fuente, y luego crea un diccionario de atributos con esa referencia y el texto actual. Luego, crea una cadena atribuida con el texto y los atributos, y crea una referencia de generador de marcos con esa cadena atribuida. Por último, llama a la función CTFramesetterSuggestFrameSizeWithConstraints para determinar el rango de caracteres que pueden caber en el textview, dada su tamaño actual. La función luego devuelve la longitud de ese rango como un número entero.

    Sin embargo, es importante tener en cuenta que esta función asume una única fuente y tamaño para todo el texto, y no tiene en cuenta ningún otro atributo. Si el textview contiene diferentes fuentes o tamaños, u otros atributos como color o estilo, esta función puede no proporcionar una estimación precisa de la cantidad de texto que puede caber en el textview.

Comments are closed.