在两个锚点之间居中

Sla*_*ion 2 anchor ios autolayout swift

centerYAnchor我想在两个锚点之间设置一个。与此类似:

centeredLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor),
Run Code Online (Sandbox Code Playgroud)

但是,我不希望它相对于屏幕居中。我希望它位于屏幕上另外两个锚点之间。就像我在顶部有一个工具栏一样:

toolbar.topAnchor.constraint(equalTo: view.topAnchor),
Run Code Online (Sandbox Code Playgroud)

然后我在底部有一个按钮,如下所示:

button.bottomAnchor.constraint(equalTo: guide.bottomAnchor, constant: -20)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以将centeredLabelsy 约束集中在 的底部锚点toolbar和顶部锚点之间button

mat*_*att 6

有没有一种方法可以将 centeredLabel 的 y 约束集中在工具栏的底部锚点和按钮的顶部锚点之间?

就在这里。简单的方法是使用透明的间隔视图,其顶部锚定到上锚点,底部锚定到下锚点。现在,您将标签中心锚定到间隔视图的中心。

然而,虽然这很简单,但这并不是最好的方法。最好的方法是创建自定义UILayoutGuide ,而不是透明的间隔视图。不幸的是,这只能在代码中完成,而不能在故事板中完成(而间隔视图和标签可以完全在故事板中配置)。但它的优点是不会因为额外的视图而给渲染树带来负担。

这是您的情况,或多或少,使用一个按钮作为上视图,一个按钮作为下视图。标签在它们之间垂直居中:

在此输入图像描述

这是生成这种情况的代码。b1b2是按钮(它们的创建和定位方式并不重要):

    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
Run Code Online (Sandbox Code Playgroud)