Можно ли получить координаты, где текст, нарисованный в стандартном (нестандартном) какао-контроле? На самом деле, мне нужна базовая линия текста, значение смещения оси y (относительно y-origin прямоугольника рамки представления). Это то, что Interface Builder показывает на панели проектирования, когда выбраны Layout-> Show Layout Rectangles.Какао управляет расположением текста?
2
A
ответ
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:];
Кроме того, что «потолок» в нем есть приближение. Не все средства управления сделают это. Некоторые могут использовать слово или использовать какую-либо другую функцию округления. Или они могут поместить свое название совершенно по-другому, и это приближение не будет работать.
Это может быть настоящей болью, чтобы получить право. В Adobe Lightroom у нас есть собственная система компоновки для элементов управления. Одним из инструментов, который был настоящим благом для проверки того, где была исходная линия для текста, является добавление некоторого кода отладки с помощью poseAs: и вставка некоторого глобального кода чертежа для наложения поверх обычного чертежа. По существу, мы можем включить это в сборках отладки, чтобы показать, где находится базовый уровень на всех элементах управления, о которых мы заботимся. Если вы делаете это много, это может сэкономить ваше время. Я не могу поделиться каким-либо кодом из-за запатентованного характера, извините. –
poseAs: устарел в Leopard;) – IlDan