Программно изменяющийся размер 1 подпредставления в UIStackView - PullRequest
0 голосов
/ 16 февраля 2019

В настоящее время я создаю калькулятор и хочу изменить размер моей кнопки 0 на размер 2 подпредставлений - это вдвое меньше, чем весь вид.Я хочу, чтобы он выглядел точно так же, как приложение для яблочного калькулятора, где 0 больше, чем все остальные кнопки.
То, как я размещаю свой вид, заключается в вертикальном UIStackView и добавлении горизонтальных UIStackView кэто так же, как на картинке ниже.enter image description here

Поэтому я хочу, чтобы в последнем горизонтальном стеке было 3 упорядоченных подпредставления, но чтобы кнопка 0 заполняла оставшееся пространство, чтобы кнопки , и =такие же размеры, как и все остальные кнопки.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Программно , вы можете установить множитель на constraint(equalTo:multiplier:), официальные документы: https://developer.apple.com/documentation/uikit/nslayoutdimension/1500951-constraint

Таким образом, мы можем ограничить две последние кнопки одинаковой шириной и сделать первую два разадлиннее, чем один из двух других.

    override func viewDidLoad() {
        super.viewDidLoad()


        view.backgroundColor = .white

        let btn1 = UIButton()
        let btn2 = UIButton()
        let btn3 = UIButton()

        btn1.backgroundColor = .red
        btn2.backgroundColor = .yellow
        btn3.backgroundColor = .blue

        let hStack = UIStackView(arrangedSubviews: [btn1, btn2, btn3])
        hStack.axis = .horizontal
        hStack.spacing = 1

        view.addSubview(hStack)
        hStack.translatesAutoresizingMaskIntoConstraints = false
        hStack.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        hStack.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        hStack.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        // Here would be what you need:
        btn2.widthAnchor.constraint(equalTo: btn3.widthAnchor).isActive = true
        btn1.widthAnchor.constraint(equalTo: btn2.widthAnchor, multiplier: 2).isActive = true
    }

enter image description here

0 голосов
/ 16 февраля 2019

Вы можете использовать stackview.distribution = .fillEquallly для первых 4 горизонтальных стековых обзоров и использовать stackview.distribution = .fillPropotionally для последнего горизонтального стекового просмотра.

Затем установите с ограничением для кнопки 0 на 50% от последнегоширина горизонтального стека.

enter image description here

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...