2010-03-13 6 views
5

화면에 표시되는 NSString의 너비를 픽셀 단위로 알고 싶습니다. 그래서 NSTextField의 경계를 정확하게 문자열 자체의 길이로 맞출 수 있습니다. 그래서 IB의 "Label"NSTextField를 사용했고, 내가 무엇을 의미하는지 모르는 사람들은 제목 "Label", 글꼴 "Lucida Grande 13px"를 선택할 수없고, 편집 할 수없고, 일반 크기가 아니며, 배경이없고, IB의 너비는 38px입니다. NSString 크기 WithAttributes : 부정확

나는 그것의 폭을 얻고 싶은 경우에

는 프로그래밍 방식으로 내가 나에게 33.293457을 줄 것이다
[@"Label" sizeWithAttributes: [NSDictionary dictionaryWithObject: [NSFont fontWithName: @"Lucida Grande" size: 13] forKey: NSFontAttributeName]].width 

를 사용합니다. 그래서 실제 너비의 약 5 px입니다.

답변

0

실제로 합리적인 것 같습니다. 두 가지 너비를 비교하고 있습니다. NSTextField에 포함 된 문자열의 너비 대 원시 문자열의 너비. 포함 된 문자열은 다른 사소한 차이점 중 어느 쪽이든 약간의 패딩 비트가있을 가능성이 높습니다.

+0

쉼표 뒤에 6 자리 숫자가 올 수 있지만 높이가 정확합니다 ... 일부 테스트를 한 후에는 원본보다 항상 5 픽셀 빠릅니다. 그 이유는 속성에 문제가있는 것 같습니다. 나는 무엇을 모르겠다. 올바른 색상, 배경 스타일, 단락 스타일, 줄 바꿈 모드 및 방향을 전달하더라도 ~ 5 픽셀 크기의 동일한 결과를 얻을 수 있습니다. – Jef

7

나는 컨트롤의 프레임과 레이아웃 프레임의 차이점을 알고 있다고 생각한다. 좋은 설명은 Frame vs Layout Frame을 참조하십시오.

너는 너비 계산에있어 옳은 일을하고있다. Label의 경우 컨트롤 위쪽이나 아래쪽에 여분의 패딩이 없기 때문에 컨트롤의 높이에 아무런 문제가없는 것입니다. 그러나 컨트롤의 왼쪽과 오른쪽에는 추가로 세 개의 픽셀이 있습니다. 이것은 IB의 레이블 컨트롤의 프레임 및 레이아웃을 보면 확인할 수 있습니다.

그래서 ~ 5 픽셀은 실제로 정확히 6입니다.이 패딩을 고려하면 더 이상 문제가 발생하지 않습니다.

불행히도, 다양한 컨트롤을 위해 패딩이 무엇인지 결정하는 API는 없습니다 (누름 단추의 크기는 각면에 6 픽셀입니다). Apple은 http://bugreport.apple.com에 버그 신고서를 제출할 것을 제안합니다. Apple은 그들이 요청한 API의 일부를 기반으로 제공합니다. IB가 당신에게 말할 것 인 반면에, 당신은 그 값들을 스스로 코딩해야 할 것입니다. 다음 OS 릴리스에서 변경된 경우 응용 프로그램을 업데이트해야합니다.