[ios] 사용자 정의 설치 글꼴이 UILabel에 올바르게 표시되지 않음

Adobe Font Collection Pro Package에서 가져온 Helvetica Neue Condensed 글꼴 을 사용하려고합니다 . 불행히도 내에서 사용할 때 잘못 그리는 것 같습니다 UILabel.

선 높이가 올바르게 계산 된 것 같지만 (제 생각에는) 글꼴이 표시되면 경계 상자의 맨 위에 정렬됩니다. [myLabel sizeToFit]이 화면 캡처를 생성하기 위해 호출 하고 너비 만 조정했습니다.

잘못된 글꼴 렌더링의 화면 캡처

나는 굵은 글꼴과 일반 버전의 글꼴 모두에서 동일한 문제가 발생했습니다. OSX에서 Helvetica Neue Bold 버전을 가져와 내 장치에 넣을 수 있었고 잘 표시됩니다 (위 그림의 녹색 배경).

이런 식으로 그리는 글꼴 파일이나 내 코드에 어떤 문제가 있습니까?



답변

여기에 ttf 글꼴 파일 패치와 관련된 솔루션을 게시했습니다 .

다음은 UILabel, UIButton 등에서 동일한 문제가 발생한 사용자 지정 글꼴에 대해 작동했던 솔루션입니다. 글꼴의 문제는 ascender 속성이 시스템 글꼴의 값에 비해 너무 작다는 사실로 밝혀졌습니다. Ascender는 글꼴 문자 위의 세로 공백입니다. 글꼴을 수정하려면 Apple Font Tool Suite 명령 줄 유틸리티 를 다운로드해야합니다 . 그런 다음 글꼴을 가져 와서 다음을 수행하십시오.

~$ ftxdumperfuser -t hhea -A d Bold.ttf

이렇게하면 Bold.hhea.xml. 텍스트 편집기로 열고 ascender속성 값을 늘리십시오 . 자신에게 가장 적합한 정확한 값을 찾으려면 약간의 실험을해야합니다. 제 경우에는 750에서 1200으로 변경했습니다. 그런 다음 다음 명령 줄을 사용하여 유틸리티를 다시 실행하여 변경 사항을 ttf 파일에 다시 병합합니다.

~$ ftxdumperfuser -t hhea -A f Bold.ttf

그런 다음 앱에서 결과 ttf 글꼴을 사용하십시오.


답변

그래서 이것은 kolyuchiy의 대답 수정 된 버전입니다 .

Glyphs로 글꼴을 열었습니다. 다음 아무것도 수정하지 않고 내보냈습니다. 어떻게 든 마술처럼 수직 정렬 문제가 사라졌습니다!

더 좋은 점은 새 글꼴이와 같은 메서드와 잘 어울리기 sizeWithFont:때문에 Joshua가 언급 한 문제가 없다는 것 입니다.

나는 kolyuchiy 언급 한 명령으로 HHEA 테이블을 확인해 보니 문양 그냥하지 수정 된 것으로 나타났습니다 ascender뿐만 아니라, lineGap그리고 numberOfHMetrics나를 위해.

이전의 원시 데이터는 다음과 같습니다.

versionMajor="1"
versionMinor="0"
ascender="780"
descender="-220"
lineGap="200"
advanceWidthMax="1371"
minLeftSideBearing="-73"
minRightSideBearing="-52"
xMaxExtent="1343"
caretSlopeRise="1"
caretSlopeRun="0"
caretOffset="0"
metricDataFormat="0"
numberOfHMetrics="751"

이후 :

versionMajor="1"
versionMinor="0"
ascender="980"
descender="-220"
lineGap="0"
advanceWidthMax="1371"
minLeftSideBearing="-73"
minRightSideBearing="-52"
xMaxExtent="1343"
caretSlopeRise="1"
caretSlopeRun="0"
caretOffset="0"
metricDataFormat="0"
numberOfHMetrics="748"

따라서 이야기의 교훈은 상승세를 높이는 것이 아니라 다른 관련 가치도 수정합니다.

저는 타이포그래피 전문가가 아니기 때문에 그 이유와 방법을 설명 할 수 없습니다. 누구든지 더 나은 설명을 제공 할 수 있다면 대단히 감사하겠습니다! 🙂


답변

iOS 6은 글꼴의 lineGap 속성을 따르지만 iOS 7은이를 무시합니다. 따라서 줄 간격이 0 인 사용자 지정 글꼴 만 두 운영 체제에서 올바르게 작동합니다.

해결책은 lineGap을 0으로 만들고 그에 따라 어 센더를 더 크게 만드는 것입니다. 위 의 답변에 따라 한 가지 해결책은 Glyph에서 가져오고 내보내는 것입니다. 그러나 향후 버전의 앱에서는이 ‘버그’를 수정할 수 있습니다.

보다 강력한 솔루션은이 게시물에 따라 글꼴을 직접 편집하는 것 입니다. 구체적으로 특별히,

  1. OS X 글꼴 도구를 설치합니다.
  2. 글꼴 메트릭을 파일로 덤프합니다. ftxdumperfuser -t hhea -A d YOUR_FONT.ttf
  3. 편집기에서 덤프 된 파일을 엽니 다.
  4. ascender속성 값을 추가 하여 속성을 편집합니다 lineGap. 예를 들어, lineGap가 200이고 ascender750이면ascender 950을 .
  5. 설정 lineGap0으로 .
  6. 변경 사항을 글꼴에 병합합니다. ftxdumperfuser -t hhea -A f YOUR_FONT.ttf

이렇게하면 그에 따라 UI를 조정해야 할 수 있습니다.


답변

사용자 지정 글꼴 중 하나에서 동일한 문제가 발생했습니다. 또한 font ascender 속성을 편집하여 문제를 “수정”했습니다. 그러나 이것이 다른 문제와 레이아웃 문제를 일으킨다는 것을 발견했습니다. 예를 들어 ascender 편집 글꼴을 사용할 때 레이블 높이에 따라 셀 높이를 동적으로 설정하면 폭발 할 수 있습니다.

결국 우리는 UIButton contentEdgetInsets 속성을 변경했습니다.

yourButton.contentEdgeInsets = UIEdgeInsetsMake(-10, 0, 0, 0);

어떤 방법이 더 나은지 확실하지 않지만 문제를 해결하는 다른 방법을 공유하고 싶었습니다.


답변

  1. 여기에서 Apple의 글꼴 도구 다운로드 및 설치 : https://developer.apple.com/downloads/index.action?q=font (다운로드 링크는 하단에 있음)
  2. 터미널을 열고 글꼴이있는 곳으로 cd
  3. 다음 명령을 실행하십시오. ftxdumperfuser -t hhea -A d MY_FONT_NAME.ttf
  4. 이제 글꼴 속성 중 일부가 포함 된 xml 파일이 있습니다. 텍스트 편집기에서 편집합니다.
  5. “lineGap”속성을 검색하고 값에 200을 더합니다.
  6. xml 파일 저장
  7. 다음 명령을 실행하십시오. ftxdumperfuser -t hhea -A f MY_FONT_NAME.ttf
  8. xml 파일 삭제
  9. iOS 6에서 구성된 글꼴을 사용 해보고 더 좋아 보이는지 확인하십시오.
  10. 필요한 경우 3 단계로 돌아가 “lineGap”속성에 더하거나 뺄 수 있습니다. (내 구성에 250을 추가했습니다)


답변

OS X El Capitan을 실행하고이 스레드에 오는 사람들의 경우 Apple Font Tool Suite가 더 이상 호환되지 않는다는 것을 알 수 있습니다 (적어도 지금은).

그러나 무료 글꼴 편집 소프트웨어 인 FontForge를 사용 하여 kolyuchiyJoseph Lin 이 설명한 변경 사항을 수행 할 수 있습니다. .

FontForge로 글꼴을 열고 상단 메뉴에서 요소를 선택한 다음 글꼴 정보> OS / 2> 메트릭으로 이동합니다. HHEad Line Gap 및 HHead Ascent Offset 값을 편집하려고합니다.

필요한 편집을 마치면 파일> 글꼴 생성에서 글꼴을 내보내고 올바른 글꼴 형식을 선택할 수 있습니다.


답변

답변 덕분에 Glyphs로 문제를 해결했지만 약간 다릅니다.

Glyphs로 내 글꼴을 열었고 (Glyphs mini에서도 작동 함)이 섹션을 찾았습니다 (Glyphs mini에서 가져 오려면 오른쪽 상단 모서리에있는 i 버튼을 누름) :

여기에 이미지 설명 입력

이 정렬 영역 (또는 일부)을 모두 삭제하면이 문제가 해결됩니다. 나를 위해 완벽하게 작동했습니다.