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.

contentInset acepta solamente números negativos.

Estoy tratando de alinear verticalmente un texto en una vista.
Para ello, llamo a la función contentInset de la siguiente manera:

override func alignCenterVertical() {
let fittingSize = CGSize(width: bounds.width, height: CGFloat.greatestFiniteMagnitude)
let size = sizeThatFits(fittingSize)
let topOffset = (bounds.size.height – size.height * zoomScale) / 2
let positiveTopOffset = max(1, topOffset)
contentInset = UIEdgeInsets(top: positiveTopOffset, left: 0, bottom: 0, right: 0)
}

Pero esto sólo funciona cuando el valor “positiveTopOffset” es negativo. (lo contrario a lo que quiero)

Quiero exactamente este comportamiento pero con “positiveTopOffset” positivo, como en esta parte del código aquí.

Cuando dejo el código así, con “positiveTopOffset” positivo, no sucede nada. ¿Por qué?

¡Muchas gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para alinear verticalmente el texto en una vista

    Para alinear texto verticalmente en una vista, se puede utilizar la función contentInset como se muestra en el fragmento de código proporcionado. Sin embargo, parece haber un problema con la variable “positiveTopOffset” que no tiene el efecto deseado cuando se establece en un valor positivo.

    Una posible solución a este problema es calcular el topOffset de manera diferente para lograr el alineamiento deseado. Aquí hay un fragmento de código actualizado que puedes probar:

    override func alignCenterVertical() {
        let fittingSize = CGSize(width: bounds.width, height: CGFloat.greatestFiniteMagnitude)
        let size = sizeThatFits(fittingSize)
        let topOffset = (bounds.size.height - size.height * zoomScale) / 2
        let positiveTopOffset = max(0, topOffset)
        contentInset = UIEdgeInsets(top: positiveTopOffset, left: 0, bottom: 0, right: 0)
    }
    

    El único cambio aquí está en cómo se calcula la variable “positiveTopOffset”. Al usar “max(0, topOffset)”, nos aseguramos de que la inserción superior nunca sea negativa, permitiendo que sea cero o positiva según sea necesario para lograr el alineamiento vertical.

    Prueba esto y mira si funciona para ti. ¡Buena suerte!

Comments are closed.