Получить длину NSStatusItem - PullRequest
       2

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

1 голос
/ 19 августа 2011

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

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

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

1 Ответ

1 голос
/ 21 августа 2011

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

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

[[statusItem _window] frame].size.width
...