![](/img/trans.png)
[英]ios how to hide one uiview and push another uiview at the same position
[英]how to make the first line of label in the same centre position of another UIView
為了與多行標簽的第一行對齊,您應該使用約束NSLayoutAttributeFirstBaseline
(在 iOS8 中可用)或UIView
firstBaselineAnchor
上的錨點(在 iOS9 中可用)。
我最近通過在與多行標簽完全相同的位置和字體中添加一個隱藏的單行標簽,而沒有底部約束,以一種稍微不那么復雜的方式解決了這個問題。
然后您可以簡單地將圖標圖像.centerY
與隱藏標簽的.centerY
。
self.view.addConstraint(
NSLayoutConstraint(
item: icon,
attribute: .centerY,
relatedBy: .equal,
toItem: hiddenLabel,
attribute: .centerY,
multiplier: 1,
constant: 0
)
)
這是一個復雜的過程。 花點時間了解整個邏輯。
首先,我們有一些考慮:
我們將在黃色視圖的右側添加一個占位符視圖並使它們居中對齊。 方便的UIStackView
來了。
我們使用具有以下屬性的UIStackView
:
Horizontal
Center
Fill
上面的堆棧視圖使用了自動布局:
這些是堆棧視圖的約束:
現在我們將使用屬性向堆棧視圖添加兩個視圖:
這些是兩個視圖的約束:
現在是標簽的部分。 這是一個多行標簽(行數設置為0
)標簽將通過頂部、前導和尾隨約束與占位符視圖對齊。 但是頂部的限制需要稍微考慮一下。 標簽的字體大小為20
因此如果頂部約束具有-13
(不是-10
因為標簽的框架和標簽的文本之間存在頂部填充)值與占位符,那么它可以與水平中心對齊的黃色視圖。
這些是標簽的約束:
聊夠了。 我制作了一個演示,你可以在這里找到。 還要記住,如果您需要控制黃色視圖和標簽之間的水平空間,您可以通過更改堆棧視圖的間距值來實現。
還請記住,此實現的配置非常嚴格。 什么都變了,什么都壞了。 但是,如果您的需要稍微改變,以便標簽的第一行垂直對齊(而不是第一行的水平中心),您可以忘記標簽的字體大小和-13
頂部約束的值。
下面是最終的輸出。 我添加了一條水平紅線來指示黃色視圖的中間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.