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)
有没有办法可以将centeredLabel
sy 约束集中在 的底部锚点toolbar
和顶部锚点之间button
?
有没有一种方法可以将 centeredLabel 的 y 约束集中在工具栏的底部锚点和按钮的顶部锚点之间?
就在这里。简单的方法是使用透明的间隔视图,其顶部锚定到上锚点,底部锚定到下锚点。现在,您将标签中心锚定到间隔视图的中心。
然而,虽然这很简单,但这并不是最好的方法。最好的方法是创建自定义UILayoutGuide ,而不是透明的间隔视图。不幸的是,这只能在代码中完成,而不能在故事板中完成(而间隔视图和标签可以完全在故事板中配置)。但它的优点是不会因为额外的视图而给渲染树带来负担。
这是您的情况,或多或少,使用一个按钮作为上视图,一个按钮作为下视图。标签在它们之间垂直居中:
这是生成这种情况的代码。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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1497 次 |
最近记录: |