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.

Centrar UILabel en el medio de la barra de herramientas en un teclado.

¿Cómo puedo centrar una etiqueta en el medio de la barra de herramientas del teclado? Puedo poner la etiqueta en el medio del teclado, pero no está centrada correctamente.

lazy var textView: UITextView = {
    // ...
}()

lazy var dummyToolBarButton: UIButton = {
    let button = UIButton(type: .system)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setImage(UIImage(named: "cogIcon"), for: .normal)
    button.alpha = 0
    button.sizeToFit()
    return button
}()

lazy var timerLabel: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.text = "00:00";
    label.font = UIFont.monospacedDigitSystemFont(ofSize: 15.5, weight: .regular)
    label.backgroundColor = .clear
    label.textColor = .gray
    label.textAlignment = .center
    label.sizeToFit()
    return label
}()

override func viewDidLoad() {
    super.viewDidLoad()
    setToolBarOnKeyboard()
}

func setToolBarOnKeyboard() {

    let toolBar = UIToolbar()
    toolBar.sizeToFit()

    let invisibleDummyButton = UIBarButtonItem(customView: dummyToolBarButton) // la opacidad se establece en 0

    let flexibleSpaceLeft = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)

    let labelItem = UIBarButtonItem(customView: timerLabel)

    let flexibleSpaceRight = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)

    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(dismissKeyboard))

    toolBar.setItems([invisibleDummyButton, flexibleSpaceLeft, labelItem, flexibleSpaceRight, doneButton], animated: false)

    textView.inputAccessoryView = toolBar
}

@objc func dismissKeyboard() { }
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para centrar la etiqueta en el medio de la barra de herramientas del teclado, puedes ajustar el valor de width del objeto labelItem para que sea igual a la diferencia entre el ancho total de la barra de herramientas y el ancho del botón invisibleDummyButton y doneButton, y luego establecer su propiedad titlePositionAdjustment para centrar la etiqueta horizontalmente.

    Reemplaza esta línea:

    let labelItem = UIBarButtonItem(customView: timerLabel)
    

    Con estas líneas:

    let invisibleDummyButtonWidth = dummyToolBarButton.bounds.size.width
    let doneButtonWidth = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(dismissKeyboard)).width // Usa un botón temporal para obtener su ancho
    let labelWidth = toolBar.bounds.size.width - invisibleDummyButtonWidth - doneButtonWidth - 32 // 32 es el espacio horizontal total entre los elementos de la barra de herramientas
    let labelItem = UIBarButtonItem(customView: timerLabel)
    labelItem.width = labelWidth
    labelItem.titlePositionAdjustment = UIOffset(horizontal: (invisibleDummyButtonWidth - doneButtonWidth) / 2, vertical: 0) // Centra horizontalmente
    

    Esto calculará el tamaño correcto para el objeto labelItem en base al ancho total de la barra de herramientas, el ancho del botón invisibleDummyButton y el ancho del botón doneButton. Luego, establecerá la propiedad titlePositionAdjustment para centrar horizontalmente la etiqueta entre el invisibleDummyButton y el doneButton.

Comments are closed.