감사합니다, Abhinit : 당신이 센더와 소문자에 수직으로 중앙해야하는 경우 당신은에 RECT을 변경할 수 있습니다.
나는 또한 이것을 찾고 있었으므로 텍스트를 원하는대로 정렬하는 데 필요한 정확한 제약 조건을 여기에 게시하고 싶습니다.
이 이미지는 Wikipedia에서 글꼴의 다른 크기 섹션을 보여줍니다.
그래서, 당신은 윗쪽 높이, 캡 높이에서 x 높이 기준 또는 센더 높이에 정렬할지 여부에 따라 라벨을 정렬하는 방법에는 여러 가지가 있습니다.
의 당신이 "안녕하세요"와 같은 모자에 label
포함 된 텍스트가 있고 높이를 모자와 기준에 viewBelow
으로 정렬 viewAbove
으로 정렬 할 가정 해 봅시다. 예에서 내 유틸리티 클래스 LayoutHelper을 사용하고 있습니다,하지만 난 생각이 분명하다 희망 :
let font = label.font
let ascenderDelta = font.ascender - font.capHeight
LayoutHelper()
.addViews([
"label":label, "viewAbove":viewAbove, "viewBelow":viewBelow
])
.withMetrics(["ascenderDelta":ascenderDelta])
.addConstraints([
// -- Here the constraints to align to cap height --
"X:label.top == viewAbove.bottom - ascenderDelta",
"X:label.baseline == viewBelow.top",
...other constraints...
])
참고 :
당신은 할 것이다.에 "자동 정렬"라벨에 대해
:
나는 그것이 등 센더, 승천, 모자,
가 포함되어 있는지 여부에 따라 적절한 선 조정하는 "지능형"라벨을 만드는 방법에 대한 생각합니다
(예 : here)의 음수 인 세트를 사용하여 수행 할 수 있습니다 (예 : insets = {-ascenderDelta, 0, font.descender, 0}
사용). 그러나 당신이 가진 경우에는 오름차순/디 센다를 자릅니다. 어떤 가능한 상승자를 자르지 않고 대문자로 정렬하는 것을 선호합니다.
대문자 또는 소문자 만이 아니라 소문자의 경우 오름차순 또는 자모가 포함 된 문자를 사용하는지 여부. 'setText'를 오버라이드하는 것은 확실한 아이디어입니다. 문제는, "oyyyo"의 경우 ascender를 조정하려면, 나는 그것을 할 수 없다는 것입니다. 내가 라벨의 높이를 조정하면, 그 상승자가 상단에 남아있을 것입니다. 그렇지 않습니까? – Luke
UIBaselineAdjustmentAlignBaselines가 도움이 될 것으로 생각합니다. 그렇다고해서 UILabel과 UIFont 클래스보다 CoreText를 직접 들여다보고 싶습니다. – Abhinit