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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
8
223
0

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