2009-07-19 4 views
2

Можно ли получить координаты, где текст, нарисованный в стандартном (нестандартном) какао-контроле? На самом деле, мне нужна базовая линия текста, значение смещения оси y (относительно y-origin прямоугольника рамки представления). Это то, что Interface Builder показывает на панели проектирования, когда выбраны Layout-> Show Layout Rectangles.Какао управляет расположением текста?

ответ

2

К сожалению, для всех элементов управления и ячеек не существует единого решения. Вы должны быть в состоянии получить хорошее приближение к этой информации с помощью этих методов:

-[NSCell titleRectForBounds:] 
-[NSCell font] 
-[NSFont ascender] 

Вот код, который работает для NSButton/NSButtonCell

NSRect titleRect = [[button cell] titleRectForBounds:[button bounds]]; 
CGFloat baseline = ceil(NSMinY(titleRect) + [[[button cell] font] ascender]); 

На данный момент базовая линия в баттона (границ) координатное пространство. Возможно, вы захотите преобразовать его в другое пространство с помощью [NSView convertPoint: toView:];

Кроме того, что «потолок» в нем есть приближение. Не все средства управления сделают это. Некоторые могут использовать слово или использовать какую-либо другую функцию округления. Или они могут поместить свое название совершенно по-другому, и это приближение не будет работать.

+2

Это может быть настоящей болью, чтобы получить право. В Adobe Lightroom у нас есть собственная система компоновки для элементов управления. Одним из инструментов, который был настоящим благом для проверки того, где была исходная линия для текста, является добавление некоторого кода отладки с помощью poseAs: и вставка некоторого глобального кода чертежа для наложения поверх обычного чертежа. По существу, мы можем включить это в сборках отладки, чтобы показать, где находится базовый уровень на всех элементах управления, о которых мы заботимся. Если вы делаете это много, это может сэкономить ваше время. Я не могу поделиться каким-либо кодом из-за запатентованного характера, извините. –

+0

poseAs: устарел в Leopard;) – IlDan

 Смежные вопросы

  • Нет связанных вопросов^_^