макет с полями до и после с помощью equalToSystemSpacingAfter - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь изменить некоторые раскладки, которые у меня есть, на раскладку без номеров. Это то, что у меня есть для сегментированного бара, который должен быть внутри представления контейнера с чем-то вроде этого | - margin - segmented - margin -|

segmentedControl.leadingAnchor.constraint(equalToSystemSpacingAfter: margins.leadingAnchor, multiplier: 1),
segmentedControl.trailingAnchor.constraint(equalToSystemSpacingAfter: margins.trailingAnchor, multiplier: 1),

Я знаю, что вторая строка не имеет никакого смысла, но я не см. любой equalToSystemSpacingBEFORE сразу после, и я не уверен, как это сделать, не полагаясь только на распространение макета.

По сути, leadAchor отлично работает с этим кодом, но с trailingAnchor (как следует из названия метода) ) добавляет поле ПОСЛЕ конечного якоря, а это не то, что я хочу.

есть идеи?

Ответы [ 2 ]

1 голос
/ 17 января 2020

Вы можете ограничить трейлинг-якорь своего «контейнерного» представления относительно трейлинг-якоря вашего сегментированного элемента управления.

Вот краткий пример, который, как я считаю , дает вам нужный макет:

class SysSpacingViewController: UIViewController {

    let seg: UISegmentedControl = {
        let v = UISegmentedControl(items: ["A", "B", "C"])
        v.translatesAutoresizingMaskIntoConstraints = false
        return v
    }()

    let cView: UIView = {
        let v = UIView()
        v.translatesAutoresizingMaskIntoConstraints = false
        v.backgroundColor = .white
        return v
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .systemYellow

        cView.addSubview(seg)
        view.addSubview(cView)

        let g = view.safeAreaLayoutGuide
        let m = cView.layoutMarginsGuide

        NSLayoutConstraint.activate([

            cView.topAnchor.constraint(equalTo: g.topAnchor, constant: 40.0),
            cView.leadingAnchor.constraint(equalTo: g.leadingAnchor, constant: 40.0),
            cView.trailingAnchor.constraint(equalTo: g.trailingAnchor, constant: -40.0),
            cView.heightAnchor.constraint(equalToConstant: 70.0),

            seg.leadingAnchor.constraint(equalToSystemSpacingAfter: m.leadingAnchor, multiplier: 1.0),
            m.trailingAnchor.constraint(equalToSystemSpacingAfter: seg.trailingAnchor, multiplier: 1.0),

            seg.centerYAnchor.constraint(equalTo: cView.centerYAnchor),

        ])

    }

}

Результат:

enter image description here

0 голосов
/ 17 января 2020

Я думаю, что вы можете использовать это:

segmentedControl.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 8).isActive = true
segmentedControl.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -8).isActive = true

Пожалуйста, измените названия containerView и constants соответственно.

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