Alinear múltiples UILabels generados en tiempo de ejecución en un UITableView

tengo unUITableView que necesita admitir contenido al enumerar el estilo algo así como

Pero la parte difícil es que la cantidad de "Etiqueta" variará con cada celda, algunas pueden tener solo 4 pero también hasta 12. Además, el "Valor" puede ser una sola palabra o una frase corta de hasta dos líneas (como en la imagen de arriba). Entonces decidí usarUIStackView para ayudarme a empacar y dimensionar miUILabels solía mostrar esto. Actualmente estoy atrapado en un problema cuando la "Etiqueta" varía en longitud como:

Necesito que el extremo delantero de los "Valores" esté alineado como la primera imagen, aunque la "Etiqueta" varía en longitud. ¿Hay un comportamiento deUIStackView eso lo permite? ¿O hay otro enfoque que me permita obtener los resultados que necesito?

Nota: Cada "Etiqueta" y "Valor" están en unoUIStackViewLo hice para alinearlos.

Intenté usar el formato de cadena también, pero los "valores" con más de una línea se ajustarán debajo de la etiqueta en lugar de ajustarse por sí mismos como lo hago en las imágenes.

Traté de colocar todas las "Etiquetas" en unaUIStackView y todos los "Valores" en otro, no pude lograr que se alineen como lo hacen en las imágenes una vez que el "Valor" es más de una línea.

O si fue un error que cometí en alguna parte, así es como creé elUIStackViews:

    var higherCount = 0
    if labels.count<values.count {
        higherCount = values.count
    } else {
        higherCount = labels.count
    }

    mainStackView = UIStackView(frame: CGRect(x: 0, y: 0, width: frame.width, height: frame.height))

    for i in 0..<higherCount {
        var height:CGFloat = 20
        if (values[i] as NSString).size(attributes: [NSFontAttributeName:UIFont.systemFont(ofSize: UIFont.systemFontSize)]).width > frame.width {
            height = 42
        }

        let stackViewToAdd = UIStackView(frame: CGRect(x: 0, y: 0, width: frame.width, height: height))

        let label = UILabel(frame: CGRect(x: 0, y: 0, width: frame.width, height: height))
        if labels.count<higherCount {
            label.text = ""
        } else {
            label.text = labels[i]
        }
        label.setContentCompressionResistancePriority(1000, for: .horizontal)
        label.setContentHuggingPriority(999, for: .horizontal)
        stackViewToAdd.addArrangedSubview(label)
        let value = UILabel(frame: CGRect(x: 0, y: 0, width: frame.width, height: height))
        if values.count<higherCount {
            value.text = ""
        } else {
            value.text = values[i]
        }
        value.lineBreakMode = .byWordWrapping
        value.numberOfLines = 2
        stackViewToAdd.addArrangedSubview(value)
        mainStackView?.addArrangedSubview(stackViewToAdd)
    }
    mainStackView?.alignment = .fill
    mainStackView?.axis = .vertical
    mainStackView?.distribution = .fill

Respuestas a la pregunta(1)

Su respuesta a la pregunta