Ios 如何使标签的第一行位于另一视图的同一中心位置
我想把这些单词的第一行(我在这里使用的是UI标签,还是应该使用文本视图?),在红线的中心,红线的中心位于黄色UIView的中心 我尝试了一些自动布局配置,但仍然未能实现这一点Ios 如何使标签的第一行位于另一视图的同一中心位置,ios,autolayout,Ios,Autolayout,我想把这些单词的第一行(我在这里使用的是UI标签,还是应该使用文本视图?),在红线的中心,红线的中心位于黄色UIView的中心 我尝试了一些自动布局配置,但仍然未能实现这一点 这是一个复杂的过程。花点时间去理解整个逻辑 首先,我们有一些考虑: 黄色视图具有定义的高度(以及定义的宽度,以便确定其水平中心) 标签具有固定的字体大小(因此第一行的水平中心可以通过约束与黄色视图的水平中心对齐) 我们将在黄色视图的右侧添加一个占位符视图,并使其居中对齐。这是方便的UIStackView 我们采用具有
这是一个复杂的过程。花点时间去理解整个逻辑 首先,我们有一些考虑:
- 黄色视图具有定义的高度(以及定义的宽度,以便确定其水平中心)
- 标签具有固定的字体大小(因此第一行的水平中心可以通过约束与黄色视图的水平中心对齐)
我们将在黄色视图的右侧添加一个占位符视图,并使其居中对齐。这是方便的
UIStackView
我们采用具有以下属性的UIStackView
:
- 轴:
水平
- 对齐:
居中
- 分配:
Fill
- 间距:根据您的需要
- 前导、尾随、顶部:相对于超级视图(视图控制器的视图/安全区域)
- 高度:固定高度(这将是黄色视图的高度)
- 黄色视图:
- 宽度:固定宽度
- 高度:等于堆栈视图的高度
- 但请注意,我使用了宽度和纵横比约束,以便视图保持矩形
- 占位符视图:
- 身高:0
0
),标签将通过顶部、前导和尾随约束与占位符视图对齐。但最重要的限制需要稍加考虑。标签的字体大小为20
,因此,如果顶部约束具有带有占位符的-13
(而不是-10
,因为标签框架和标签文本之间有顶部填充)值,则它可以与黄色视图的水平中心对齐
以下是标签的约束条件:
说够了。我做了一个演示,你会发现。还请记住,如果需要控制黄色视图和标签之间的水平空间,可以通过更改堆栈视图的间距值来实现 还要记住,这个实现的配置非常严格。一切都会改变,一切都会破裂。但是,如果您的需要稍有改变,使标签的第一行垂直对齐(而不是第一行的水平中心),您可以忽略标签的字体大小和
-13
顶部约束的值
下面是最终输出。我添加了一条水平红线,以指示黄色视图的中间
要与多行标签的第一行对齐,应使用约束
nslayouttributefirstbaseline
(在iOS8中可用)或UIView
firstBaselineAnchor
(在iOS9中可用).我最近以一种稍微不太复杂的方式解决了这个问题,在与多行标签完全相同的位置和字体中添加了一个隐藏的单行标签,,没有底部约束。
然后,只需将图标图像.centerY
与隐藏标签的.centerY
对齐即可
self.view.addConstraint(
NSLayoutConstraint(
item: icon,
attribute: .centerY,
relatedBy: .equal,
toItem: hiddenLabel,
attribute: .centerY,
multiplier: 1,
constant: 0
)
)
从视图中将前导空间设置为8点。将底部空间约束更改为大于或等于
。多行ui标签
通常不由顶部和底部空间固定。最好让它自己成长。如果要固定视图大小或文本可能比视口长,则应使用UITextView
。您不能在标签上方添加一些边距,即通过将顶部约束常数设置为0以外的值吗?您可以创建一个0高度视图,该视图的中心与黄色视图垂直对齐,然后将UILable
的顶部空间设置为0高度视图,设置为0如果您需要占位符视图,然后需要一些填充来说明标签高度,您最好将标签顶部固定到黄色视图,然后添加一些填充,直到看起来合适为止。字体大小固定的初始声明将使视力差的最终用户无法使用。喜欢你的应用程序。当用户进入“设置”并启用“可访问大字体”时,应用程序自动调整字体是一种很好的做法。