Выберите, какое подпредставление в stackView будет растягиваться (программно) - PullRequest
0 голосов
/ 21 января 2019

У меня есть отображение горизонтальных стековых представлений, подвиды которых состоят из метки и текстового поля. stackView ограничен границами представления

Я пытаюсь растянуть мое подпредставление textField так, чтобы оно заполняло оставшееся пространство стека, в то время как стеки меток подстраивались под сам размер метки. Но происходит обратное. Я перепробовал много решений, но ничего не помогло Все представления и ограничения сделаны нами программно.

Для моего стека я использую:

func customTextField() -> UIStackView {

    let stack: UIStackView = {
        let sv = UIStackView()
        sv.axis = .horizontal
        sv.isLayoutMarginsRelativeArrangement = true
        sv.alignment = .leading
        sv.backgroundColor = .red
        sv.translatesAutoresizingMaskIntoConstraints = false
        return sv
    }()


    let label: UILabel = {
        let lb = UILabel()
        lb.backgroundColor = .red
        lb.text = "Label is here"
        lb.translatesAutoresizingMaskIntoConstraints = false
        return lb
    }()

    let textField: UITextField = {
        let tf = UITextField()
        tf.backgroundColor = .blue
        tf.text = "Text Field"
        tf.translatesAutoresizingMaskIntoConstraints = false
        return tf
    }()


    stack.addArrangedSubview(label)
    stack.addArrangedSubview(textField)
    return stack
}

вызывающая сторона моего customTextField:

    let profileUserStack: UIStackView = {
        let stack = UIStackView()
        stack.axis = .vertical
        stack.spacing = 8
        stack.contentMode = .scaleToFill
        stack.translatesAutoresizingMaskIntoConstraints = false
        return stack
    }()
    self.addSubview(profileUserStack)

    for i in profileTextViews {
        let view = self.customTextField()
        profileUserStack.addArrangedSubview(view)
    }

    constraints.append(profileUserStack.buildConstraint(toItem: perfilImageView, constant: 32, type: .top, baseItem: .bottom))

    constraints.append(profileUserStack.buildConstraint(toItem: self, constant: 16, type: .leading, baseItem: .leading))

    constraints.append(profileUserStack.buildConstraint(toItem: self, constant: -16, type: .trailing, baseItem: .trailing))

    activateConstraints(&constraints, to: self)

Результаты: https://imgur.com/a/ccFZlRM

Обратите внимание, это именно то, чего я хочу достичь. Но я хочу, чтобы textField растягивался.

1 Ответ

0 голосов
/ 21 января 2019

Установите для contentHuggingPriority значение label, чтобы оно всегда оставалось размером его содержимого, а textField занимало оставшееся пространство.

label.setContentHuggingPriority(.defaultHigh, for: .horizontal)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...