[ios] UIButton 사용자 정의 글꼴 수직 정렬

내가 야해 UIButton때 내보기로드를 설정 사용자 지정 글꼴을 사용하는 :

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.searchButton.titleLabel.font = [UIFont fontWithName: @"FONTNAME" size: 15.0 ];
}

내가 가진 문제는 글꼴이 중심선 위로 떠 다니는 것처럼 보인다는 것입니다. 이 줄을 주석 처리하면 기본 글꼴이 세로 중앙에 잘 표시됩니다. 그러나 사용자 정의 글꼴로 변경하면 수직 정렬이 깨집니다.

사용자 지정 글꼴을 사용하는 표 셀에서도 동일한 문제가 발생합니다.

사용자 지정 글꼴이 다른 글꼴만큼 크지 않다는 것을 뷰 어딘가에 알려야합니까?

편집 : 방금 사용중인 글꼴이 Windows TrueType 글꼴이라는 것을 깨달았습니다. Mac의 TextEdit에서 잘 사용할 수 있지만 내 앱의 정렬에만 문제가 있습니다.

버튼 텍스트가 세로로 가운데에 있지 않습니다.



답변

UILabel에 올바르게 표시되지 않는 사용자 정의 설치 글꼴 에서 유사한 문제가 논의되었습니다 . 주어진 해결책이 없습니다.

다음은 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 글꼴을 사용하십시오.

OS X El Capitan

Apple Font Tool Suite Installer는 바이너리 파일을 보호 된 디렉토리에 설치하려고하기 때문에 SIP로 인해 OSX El Capitan에서 더 이상 작동하지 않습니다 . 수동으로 추출해야합니다 ftxdumperfuser. 첫 번째 이후의 포장을 풀고 로컬 디렉토리에 데미지에서 PKG 복사 OS X Font Tools.pkg

~$ xar -xf OS\ X\ Font\ Tools.pkg

이제 폴더 fontTools.pkg로 이동하십시오.

~$ cd fontTools.pkg/

페이로드 추출

~$ cat Payload | gunzip -dc | cpio -i

이제 ftxdumperfuser바이너리가 현재 폴더에 있습니다. /usr/local/bin/다음과 같이 터미널 응용 프로그램 내부의 모든 폴더에서 사용할 수 있도록 이동할 수 있습니다.

~$ mv ftxdumperfuser /usr/local/bin/


답변

제목이 아닌 상위 콘텐츠를 조정하는 문제를 해결했습니다.

예 : button.contentEdgeInsets = UIEdgeInsetsMake (10.0, 0.0, 0.0, 0.0);

행운을 빕니다!


답변

글꼴에 따라 다를 수 있으므로 이것이 도움이 될지 확실하지 않지만 기준선이 잘못 정렬되었을 수 있습니다.

self.searchButton.titleLabel.baselineAdjustment =
    UIBaselineAdjustmentAlignCenters;


답변

이것이 최선의 답 이라고 생각 합니다.
ascender, numberOfHMetrics 등으로 놀지 않고 Glyphs 응용 프로그램으로 가져 오기-내보내기 및 작업이 완료되었습니다. 이 답변에 감사드립니다 :
https://stackoverflow.com/a/16798036/1207684


답변

Interface Builder에서 시도해 볼 수 있습니다. 방법에 대한 스냅 샷은 다음과 같습니다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력

보시다시피 IB에서이 작업을 수행하는 것은 고유 한 이점이 있습니다.


답변

파티에 늦었지만 이 문제가 N 번째로 나에게 맞았을 때, 내가 찾은 가장 간단한 해결책 인 using Python FontTools를 게시 할 것이라고 생각 했습니다 .

  1. 시스템에서 사용할 수없는 경우 Python 3을 설치합니다.

  2. FontTools 설치

    pip3 install fonttools

    FontTools 에는 XML과의 변환을 가능하게하는 TTX 도구가 포함되어 있습니다.

  3. 동일한 폴더에서 글꼴을 .ttx로 변환하십시오.

    ttx myFontFile.otf

  4. .ttx에 필요한 편집을 수행하고 다음 단계에서 대체 될 .otf 파일을 삭제하십시오.

  5. 파일을 .otf로 다시 변환

    ttx myFontFile.ttx


동기 부여 : kolyuchi
솔루션 은 불완전 하며이 확장 된 설치 흐름 에도 불구하고 실행 ftxdumperfuser하면 10.15.2 Catalina에서 오류가 발생했습니다.


답변