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 puedo determinar qué fuente se está utilizando (por defecto) en el UISegmentedControl?

Hay una docena de respuestas sobre cómo establecer la fuente de un UISegmentedControl, pero quiero determinar qué fuente se está utilizando sin haber sido configurada manualmente.

override func viewDidLoad() {
    super.viewDidLoad()
    let s = segmentedControl.state // normal
    let ta1 = segmentedControl.titleTextAttributes(for: .normal) // nil
    let ta2 = UISegmentedControl.appearance().titleTextAttributes(for: .normal) // nil
}

La documentación de API de Apple no aporta ninguna información.

El propósito final es utilizar la fuente para calcular el tamaño de la cadena y compararlo con el tamaño del segmento (si puedo obtenerlo) y determinar si el título está siendo truncado. Similar a Cómo comprobar si UILabel está truncado.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para determinar la fuente de un UISegmentedControl que no ha sido establecida manualmente, puedes utilizar el siguiente código:

    let attributes = segmentedControl.titleTextAttributes(for: .normal)
    let font = attributes?[.font] as? UIFont
    

    Esto recuperará los atributos de texto del título para el estado normal del UISegmentedControl y luego extraerá el atributo de fuente si existe. Si la fuente no está establecida, retornará nil.

    Una vez que tengas la fuente, puedes utilizarla para calcular el tamaño de la cadena y compararlo con el tamaño del segmento para determinar si el título está siendo truncado. Esto se puede hacer utilizando el método size(withAttributes:) de NSString.

    Por ejemplo:

    let title = segmentedControl.titleForSegment(at: segmentIndex) ?? ""
    let size = (title as NSString).size(withAttributes: [.font: font])
    let isTruncated = size.width > segmentedControl.bounds.width / CGFloat(segmentedControl.numberOfSegments)
    

    Este código recupera el título para el índice de segmento dado (o una cadena vacía si es nulo), calcula el tamaño de la cadena del título con el atributo de fuente y luego lo compara con el tamaño del segmento dividiendo el ancho del control segmentado por el número de segmentos. Si el título es más ancho que el tamaño del segmento, se considera truncado.

    Ten en cuenta que este código asume que los segmentos del control segmentado están espaciados de manera uniforme y tienen el mismo ancho. Si los tamaños de los segmentos varían, deberás calcular el tamaño de cada segmento individualmente.

Comments are closed.