Выравнивание нескольких UILabels, генерируемых во время выполнения, в UITableView

у меня естьUITableView который должен поддерживать контент, перечисляя стиль что-то вроде

Но самое сложное в том, что количество «Меток» будет варьироваться в зависимости от каждой ячейки, некоторые могут иметь только 4, но также и до 12. Кроме того, «Значение» может быть либо одним словом, либо короткой фразой до двух строк (как в изображение выше). Поэтому я решил использоватьUIStackView чтобы помочь мне упаковать и оценить мойUILabels используется для отображения этого. В настоящее время я застрял в проблеме, когда «Метка» варьируется по длине, например:

Мне нужно, чтобы передний конец «Значения» был выровнен, как первое изображение, даже если «Метка» различается по длине. Есть ли поведениеUIStackView что позволяет так? Или есть другой подход, который может позволить мне получить результаты, которые мне нужны?

Примечание: каждый «ярлык» и «значение» в одномUIStackViewЯ сделал это, чтобы выровнять их.

Я тоже пытался использовать форматирование строк, но «Значения» с более чем одной строкой будут переноситься под меткой, а не переноситься отдельно, как мне удается сделать в изображениях.

Я пытался разместить все "этикетки" в одномUIStackView и все «Значения» в другом, я не мог заставить их выравниваться, как они делают на изображениях, когда «Значение» больше, чем одна строка.

Или, если это может быть ошибка, которую я сделал где-то, это то, как я создалUIStackViews:

    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

Ответы на вопрос(1)

Ваш ответ на вопрос