Получить длину NSStatusItem

В моем приложении есть NSStatusItem, который можно настроить для отображения текста. Этот текст может меняться, и проблема в том, что каждый раз, когда он меняет длину, весь элемент состояния меняет свою длину, что вызывает «мерцание ширины».

Я подумал о том, чтобы установить длину элемента состояния на NSVariableStatusItemLength, вставить максимально длинный текст, вернуть длину, а затем установить ее как постоянную длину для элемента состояния. Однако похоже, что функция length для NSStatusItem совершенно бесполезна для этого, так как она просто возвращает обратно NSVariableStatusItemLength вместо фактической длины.

Итак, есть ли другой способ предварительно рассчитать, как долго должен быть NSStatusItem для хранения некоторого текста и, возможно, значка? Например, гарантируется ли одинаковый размер и размер значка и шрифта на всех системах Mac, чтобы я мог просто «измерить» оптимальную длину в своей системе?


person houbysoft    schedule 19.08.2011    source источник


Ответы (1)


Обходным путем для получения длины является использование [NSImage size].width для получения ширины любых значков в элементе состояния, а затем использование [NSString sizeWithAttributes:nil].width для получения ширины строки. Добавьте начинку по вкусу.

Другой способ, используя частные API, — установить самую длинную строку, а затем получить ширину следующим образом:

[[statusItem _window] frame].size.width
person houbysoft    schedule 21.08.2011
comment
_window не компилируется из-за того, что это частный API. Какой самый чистый обходной путь? - person ArtOfWarfare; 27.01.2014