Центрирование между двумя якорями - PullRequest
0 голосов
/ 24 мая 2019

Я хочу установить centerYAnchor между двумя якорями. Похоже на это:

centeredLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor),

Однако я не хочу, чтобы он был отцентрирован относительно экрана. Я хочу, чтобы он был прямо между двумя другими якорями на экране. Например, если у меня вверху есть панель инструментов, например:

toolbar.topAnchor.constraint(equalTo: view.topAnchor),

Тогда у меня есть кнопка внизу, как это:

button.bottomAnchor.constraint(equalTo: guide.bottomAnchor, constant: -20)

Есть ли способ, которым я могу центрировать ограничение centeredLabel, чтобы быть правым между нижним якорем toolbar и верхним якорем button?

1 Ответ

4 голосов
/ 24 мая 2019

Есть ли способ, которым я могу центрировать ограничение y по центру Label, чтобы оно находилось прямо между нижним ящиком панели инструментов и верхним якорем кнопки?

Да, есть. Простой способ - использовать прозрачный вид распорки, верхняя часть которого прикреплена к верхнему якору, а нижняя - к нижнему. Теперь вы прикрепите ярлык по центру к центру вида распорки.

Однако, хотя это и просто, это не лучший способ. Лучший способ - создать вместо прозрачного спейсера пользовательский UILayoutGuide . К сожалению, это может быть сделано только в коде, а не в раскадровке (тогда как вид разделителя и метка могут быть полностью сконфигурированы в раскадровке). Но у него есть то преимущество, что оно не обременяет дерево рендеринга дополнительным представлением.

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

enter image description here

Вот код, который создал эту ситуацию. b1 и b2 - кнопки (и не важно, как они создаются и располагаются):

    let g = UILayoutGuide()
    self.view.addLayoutGuide(g)
    g.topAnchor.constraint(equalTo: b1.bottomAnchor).isActive = true
    g.bottomAnchor.constraint(equalTo: b2.topAnchor).isActive = true
    g.leadingAnchor.constraint(equalTo:b1.leadingAnchor).isActive = true
    g.trailingAnchor.constraint(equalTo:b1.trailingAnchor).isActive = true
    let lab = UILabel()
    lab.text = "Label"
    lab.translatesAutoresizingMaskIntoConstraints = false
    self.view.addSubview(lab)
    lab.leadingAnchor.constraint(equalTo:g.leadingAnchor).isActive = true
    lab.centerYAnchor.constraint(equalTo:g.centerYAnchor).isActive = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...