Пользовательский NSMenuItem с выровненной справа текстовой меткой - PullRequest
0 голосов
/ 14 февраля 2020

То, что я хочу реализовать

Я ищу способ отображения метки заголовка и метки подробного текста в NSMenuItem. Желательно, чтобы это выглядело примерно так: NSMenuItem Example

  1. Метка заголовка выровнена по левому краю со всеми другими заголовками NSMenuItem
  2. Подробности Текстовая метка выровнена по правому краю
  3. Текстовая метка детализации имеет цвет текста, отличный от заголовка
  4. Выделение / Подменю et c. работать как положено

Что я уже пробовал

Читая документацию, я нашел следующие возможные реализации:

  1. Создайте пользовательский NSView и установите NSMenuItem.view
  2. Используйте значение по умолчанию NSMenuItem и используйте NSAttributedString

Сначала я попытался использовать пользовательский NSView , Однако я не смог правильно настроить размер NSMenuItem, чтобы отобразить весь доступный текст. Я думаю, некоторые маски с автоматическим изменением размера не работают правильно, но я не уверен. Также таким образом мне нужно было бы повторно реализовать выделение / стрелку для подменю, ...

Затем я начал экспериментировать с NSAttributedString. Я вычисляю заголовок с наибольшим количеством символов, а затем дополняю строку title += string.padding(toLength: maxTitleLength, withPad: " ", startingAt: 0). NSAttributedString по-разному окрашивает заголовок и метку детализации. Однако, похоже, это не сработает, поскольку метки сведений не выровнены правильно, хотя заголовок дополняется до той же длины. Я думаю, это имеет смысл, поскольку символы имеют разную ширину?


TL; DR - Вопрос

Так есть ли другой способ реализовать желаемый дизайн, который я не нашла? У вас есть какой-нибудь совет для меня, как это реализовать?

1 Ответ

0 голосов
/ 14 февраля 2020

Неважно я нашел ответ сам. На самом деле это работает для меня сейчас, используя свойство view NSMenuItem для установки пользовательского представления. Этот ответ привел меня в правильном направлении: Подсветка NSMenuItem с пользовательским представлением? .

...