Установите ширину кнопки, чтобы соответствовать динамическому заголовку кнопки - PullRequest
0 голосов
/ 29 января 2019

У меня структурированный пользовательский интерфейс, скажем, Level 1 (UP), Level 2 (DOWN) с некоторыми элементами управления. На уровне 1 у меня есть метка L1. На уровне 2 у меня есть кнопка и метка L2

In.Уровень 2 моя кнопка может быть удалена во время выполнения, и я хотел, чтобы мой ярлык L2 был выровнен по переднему краю как L1

Здесь я сталкиваюсь с двумя проблемами

  1. Когда яустановить заголовок кнопки программно, я хочу настроить кнопку так, чтобы ее ширина увеличивалась при увеличении текста, и уменьшала ширину при меньшем содержании текста.Этого не происходитПожалуйста, смотрите ниже скриншоты ограничений, которые у меня есть

  2. Когда я удалил свою кнопку из суперпредставления, я хотел, чтобы моя метка L2 Leading была выровнена с лидирующей L1.Итак, я создал ограничение из L2.leading = L1.leading и prioirty равно 999

В этом случае кнопка уменьшается до почти 0, даже если у меня есть текст в этом.Пожалуйста, посоветуйте мне настроить это

enter image description here

enter image description here

1 Ответ

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

Задача № 1:

используйте .horizontal UIStackview для кнопки и текста.установите его распределение на .fill.Для кнопки установите приоритет сопротивления содержимого contentPress .required для .horizontal и установите приоритет contenHugging .required для .horizontal.Таким образом, кнопка всегда будет переносить текст независимо от того, что.

Задача № 2:

При размещении внутри стека, вам не нужно удалять кнопку изSuperView.Просто скройте это, используя isHidden.

Код Демонстрация

class SampleVC: UIViewController {

private var didAddConstraint = false

// Basic Views
private let label: UILabel = {
    let view = UILabel()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.text = "Label"
    return view
}()
private let topButton: UIButton = {
    let view = UIButton()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.setTitle("Button", for: .normal)
    view.setTitleColor(.gray, for: .highlighted)
    view.backgroundColor = .green

    view.setContentHuggingPriority(.required, for: .horizontal)
    view.setContentCompressionResistancePriority(.required, for: .horizontal)

    return view
}()
private let rightLabel: UILabel = {
    let view = UILabel()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.numberOfLines = 0
    view.text = "label"
    view.backgroundColor = .red
    return view
}()
private lazy var stackview: UIStackView = {
    let view = UIStackView()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.axis = .horizontal
    view.distribution = .fill

    view.addArrangedSubview(topButton)
    view.addArrangedSubview(rightLabel)
    return view
}()


override func loadView() {
    super.loadView()

    view.addSubview(label)
    view.addSubview(stackview)

    view.setNeedsUpdateConstraints()

    view.backgroundColor = .white
}
override func updateViewConstraints() {
    super.updateViewConstraints()

    if didAddConstraint == false {
        didAddConstraint = true

        // top label
        label.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 16.0).isActive = true
        label.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
        label.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true

        // stackview
        stackview.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 16.0).isActive = true
        stackview.topAnchor.constraint(equalTo: label.bottomAnchor, constant: 8.0).isActive = true
        stackview.rightAnchor.constraint(equalToSystemSpacingAfter: view.rightAnchor, multiplier: 16.0).isActive = true
    }
}



override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

        // TEST Code
        // topButton.setTitle("TEST TEST TEST", for: .normal)
        // topButton.isHidden = true

    }
}
...