2014-04-25 4 views
1

Cocoa에서 비표준 글꼴을 사용하는 경우 표준 시스템 글꼴과 비교하여 글꼴이 잘못 배치되는 경우가 있습니다. 문제를 설명하는 샘플 OS X Cocoa Application을 만들었습니다 : http://www.fileconvoy.com/dfl.php?id=g2bff79a0dcf64cc4999493513da42fd8dbb9294e1.Cocoa에서 사용자 글꼴이 잘못 배치 된 경우

그것은 다음과 같습니다 : 오른쪽, 글꼴 알 바얀로 변경되는 반면

Custom font is misplaced inside label and button

왼쪽에있는 라벨과 버튼, 기본 시스템 글꼴입니다 (OS의 X와 함께 제공) .

글꼴을 동적으로 변경해야하는 응용 프로그램을 개발 중입니다.

  • 버튼 : 사용자가이 같은 유사한 행동 하나에 글꼴을 변경하는 경우, 내가 좋아하는이 경우, 컨트롤 내부의 여백/패딩을 변경하는 몇 가지 기술을 필요 + 5px 상단 여백/패딩을
  • 레이블 : -5px 위쪽 여백/패딩

어떻게 수행 할 수 있습니까?

답변

1

"Helvetica Neue"는 iOS에서 다소 표준 글꼴이며 향후 OS X 버전에서 더 큰 역할을 할 가능성이 높습니다. 폰트를 변경하는 것 이외의 개별 컨트롤을 조정하는 방법을 모르지만, 텍스트를 올바르게 계산할 수있는 방법을 찾았습니다. 여기서 키는 문자열 높이를 사용하지 않고 (예 : 문자열을 가운데 맞추기 또는 배치하기 위해), 상승 자와 xHeight를 고려합니다.

다음 코드에 관계없이 사용될 폰트의 수직 중심으로 NSTextFieldCell의 제목을 그린다

- (NSRect)titleRectForBounds: (NSRect)theRect 
{ 
    NSRect titleFrame = [super titleRectForBounds: theRect]; 
    CGRect rect = [self.attributedStringValue boundingRectWithSize: NSMakeSize(FLT_MAX, NSHeight(titleFrame)) 
                  options: 0]; 
    titleFrame.origin.y -= NSHeight(rect) - floor(self.font.ascender); 
    titleFrame.origin.y += floor((titleFrame.size.height - self.font.xHeight)/2); 
    return titleFrame; 
} 

- (void)drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView *)controlView 
{ 
    NSRect titleRect = [self titleRectForBounds: cellFrame]; 
    [self.attributedStringValue drawInRect: titleRect]; 
} 

셀은 NSOutlineView의 일부이며, 따라서 플립. 뒤집히지 않은 콘텐츠의 경우 솔루션이 조금 더 간단합니다 (테스트하지 않았 음).

0

NSButtonCell 클래스의 setAttributedTitle :을 사용하십시오. NSAttributedString을 제공하십시오. 지침에 대해서는 Attributed String Programming Guide를 참조하십시오. 글꼴은 텍스트 스타일을 정의하는 NSMutableParagraphStyle의 일부입니다. 표준 단추는 미리 정의 된 스타일로 모든 작업을 수행합니다.

+0

예제를 제공해 주시겠습니까? – dhrm

관련 문제