Swift - обнаружение скрытого nsstatusitem

Я работаю над приложением панели меню MacOS, которое может иметь переменную длину:

@IBOutlet weak var statusMenu: NSMenu!

let statusItem: NSStatusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)

statusItem.title = "Long text..."
statusItem.menu = statusMenu

Если длина заголовка элемента состояния будет слишком длинной для отображения, а элемент строки меню будет скрыт, я бы хотел изменить заголовок на сокращенную версию. Итак, мне нужно:

  1. проверьте, отображается ли statusItem
  2. если нет, проверьте, сколько свободного места у меня есть, чтобы отрегулировать укорачивание
  3. изменить название

Пункт 3 прост. У меня проблемы с пунктами 1 и 2. Ни один из ответов stackoverflow у меня не работает. Есть ли способ, как это сделать?

Привет, Том!, Интересная проблема, когда я взглянул на документацию Apple, похоже, что заголовок устарел, согласно документации, в которой говорится, что: Instances are created by the NSStatusBar method statusItem(withLength:), which automatically adds the new status item to the status bar. The appearance and behavior of the status item are then set using the button property., можете ли вы вместо этого попробовать использовать свойство кнопки и посмотреть, решит ли это проблему? вот ссылка на документацию

Mostafa Berg 26.10.2018 09:17

Привет @MostafaBerg. Благодарим за упоминание о том, что он объявлен устаревшим. К сожалению, проблема не в том, как я установил заголовок. кнопка Я проверил свойство кнопки и не могу найти там способа проверить, отображается ли statusItem (.button.isVisible не работает)

Tom 26.10.2018 11:17

Что ж, isVisible, вероятно, не будет работать в этом случае, у вас есть снимки экрана с обоими состояниями, чтобы я мог посмотреть?

Mostafa Berg 26.10.2018 13:57

Текст видим: ibb.co/dH8nkq, текст слишком длинный, невидимый: ibb.co/jKqdrV

Tom 28.10.2018 16:41

Вы контролируете заказ? Если вы выйдете из Skype и снова запустите его, переместится ли значок в левую часть вашего статуса?

Mostafa Berg 28.10.2018 18:45

Он идет на левый сайт. Без частного api невозможно (?) Программно изменить порядок элементов (приоритет ак).

Tom 29.10.2018 09:25

Это правильно, но когда он идет влево, есть ли огромное пустое пространство на месте строки? Или он снова сжимается в маленькую коробочку?

Mostafa Berg 29.10.2018 09:26

Если значок скайпа находится слева, а для моего приложения справа недостаточно места, скайп и мое приложение скрыты. Похоже, что текущее сфокусированное меню приложения вычисляет, сколько места ему требуется, и если пространство больше, чем доступно, оно начинает скрывать значки строки меню, начиная с левого, пока не будет достаточно свободного места. Интересно, есть ли способ рассчитать размер текущего меню приложения?

Tom 29.10.2018 12:10
2
8
223
0

Другие вопросы по теме