UIStackView динамически добавляет 2 метки рядом друг с другом без лишних интервалов - PullRequest
0 голосов
/ 13 сентября 2018

Я новичок в разработке для iOS и немного озадачен тем, как этого добиться.

У меня есть 2 UILabel с, добавленные к UIStackView, вот так:

let horizontalStackView1 = UIStackView(arrangedSubviews: [self.label1, self.label2])

и когда я запускаю приложение, оно выглядит так:

enter image description here

Однако мне бы хотелось, чтобы надписи были рядом друг с другом без промежутков между нимичто-то вроде этого: enter image description here

Я безуспешно пытался установить horizontalStackView1.distribution, horizontalStackView1.alignment и т. д.

Как мне этого добиться?

Заранее спасибо!

ОБНОВЛЕНИЕ:

Код выглядит так (кстати, это ячейка таблицы):

class ItemTableViewCell: UITableViewCell
{
    ...
    let stateLabel = UILabel()
    let effectiveDateLabel = UILabel()
    ...

    var typeImage: UIImage?
    {
        ...
    }

    var summary: String?
    {
        ...
    }

    var effectiveDate: Date?
    {
        ...
    }

    override init(style: UITableViewCellStyle, reuseIdentifier: String?)
    {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.accessoryType = .disclosureIndicator
        ...
        let horizontalStackView1 = UIStackView(arrangedSubviews: [self.stateLabel, self.effectiveDateLabel])
        let horizontalStackView2 = UIStackView(arrangedSubviews: [typeImageViewWrapper, self.titleLabel])
        horizontalStackView2.spacing = 4
        let verticalStackView = UIStackView(arrangedSubviews: [horizontalStackView1, horizontalStackView2, self.summaryLabel])
        verticalStackView.axis = .vertical
        verticalStackView.spacing = 4
        self.contentView.addSubview(verticalStackView)
        ...
    }

    required init?(coder aDecoder: NSCoder)
    {
        fatalError()
    }
}

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Распределение стековых представлений должно быть установлено на fillProportionally, чтобы каждое упорядоченное подпредставление сохраняло свои пропорции.

Однако оставшееся пространство автоматически заполняется стековым представлением.Чтобы подавить это, вам нужно добавить пустой вид в конце.Это пустое представление нуждается в низком приоритете объятия контента, поэтому оно может увеличиваться, чтобы заполнить пространство, в котором другие представления остаются в своих пропорциях.

Кроме того, пустое представление требует intrinsicContentSize для стека, чтобы вычислить измерения:

class FillView: UIView {
    override var intrinsicContentSize: CGSize {
        get { return CGSize(width: 100, height: 100) }
    }
}

Теперь установите ваши упорядоченные подпредставления и поместите в конец fillView

let fillView: UIFillView()
fillView.setContentHuggingPriority(priority: .fittingSizeLevel, for: .horizontal)
myStackView.addArrangedSubview(fillView)

Установите стеки просмотра spacing в соответствии с вашими потребностями, чтобы поддерживать расстояние между подпредставлениями.

0 голосов
/ 13 сентября 2018

Это связано с тем, что UIStackView выбирает первое упорядоченное подпункт с наименьшим приоритетом объятия контента и изменяет его размер, так что содержимое стека просмотра занимает всю ширину.

Если вы хотите использовать UIStackView для этого случая, вы можете изменить приоритеты размещения контента, например.

label2.setContentHuggingPriority(.defaultLow, for: .horizontal)
label1.setContentHuggingPriority(.defaultHigh, for: .horizontal)
...