答案 0 :(得分:1)
我最近通过在与多行标签完全相同的位置和字体中添加一个隐藏的单行标签,以一种不太复杂的方式解决了这个问题,没有底部约束。
然后您可以简单地将图标图像 .centerY
与隐藏标签的 .centerY
对齐。
self.view.addConstraint(
NSLayoutConstraint(
item: icon,
attribute: .centerY,
relatedBy: .equal,
toItem: hiddenLabel,
attribute: .centerY,
multiplier: 1,
constant: 0
)
)
答案 1 :(得分:0)
这是一个涉及的过程。花些时间来了解整个逻辑。
首先,我们有一些注意事项:
我们将在黄色视图的右侧添加一个占位符视图,并使它们居中对齐。方便的UIStackView
来了。
我们使用具有以下属性的UIStackView
:
Horizontal
Center
Fill
上面的堆栈视图使用自动布局:
这些是堆栈视图的约束:
现在,我们将在堆栈视图中添加两个具有以下属性的视图:
这是两个视图的约束:
现在是标签的一部分。这是一个多行标签(行数设置为0
),标签将按顶部,前导和尾随约束与占位符视图对齐。但是最主要的限制需要稍作考虑。标签的字体大小为20
,因此如果顶部约束具有-13
(而不是-10
,因为标签的框架和标签的文本之间有顶部填充)值和占位符,则它可以与黄色视图的水平中心对齐。
这些是标签的约束条件:
足够多的谈话了。我做了一个演示,您会找到here。另外请记住如果需要控制黄色视图和标签之间的水平间距,可以通过更改堆栈视图的间距值来实现。
还请记住,此实现的配置非常严格。任何变化,一切都会破裂。但是,如果您的需求略有变化,以致标签的第一行垂直对齐(而不是第一行的水平中心),则您会忘记标签的字体大小和{{ }}顶部约束的值。
以下是最终输出。我添加了一条水平红线以指示黄色视图的中间。
答案 2 :(得分:0)
要与多行标签的第一行对齐,应使用约束NSLayoutAttributeFirstBaseline
(在iOS8中可用)或在UIView
firstBaselineAnchor
上的锚点(在iOS9中可用)