NSToolbarItem с сегментированным управлением - изображения не отображаются правильно

Я пытаюсь эмулировать элементы управления панели инструментов Xcode, чтобы показать / скрыть навигатор и инспектор:

Этот парень

... но без нижней панели (только слева и справа: два сегмента)

Я сделал скриншот иконок из пользовательского интерфейса Xcode и проследил их в приложении для редактирования изображений. Ресурсы для левой панели:


@ 1x:

Значок слева @ 1x

(20x20 при 72 dpi)


@2x:

Значок слева @2x

(40x40 при 72 dpi, хотя использование 20x20 при 144 dpi, похоже, не имеет значения)


Правые панели идентичны, но перевернуты горизонтально.

Все ресурсы хранятся в каталоге активов следующим образом:

Я удалил сегментированный элемент управления на панели инструментов, чтобы создать элемент панели инструментов с сегментированным элементом управления внутри него, и установил атрибут изображения для каждого сегмента (0 и 1).

Масштабирование изображения для обоих сегментов установлено на "Пропорционально вниз". Элемент управления сегментом имеет установленную ширину сегмента "Фиксированный" с шириной 48 для обоих сегментов. Элемент панели инструментов имеет минимальный размер (83 x 25) и максимальный размер (100 x 28).

Значки правильно отображаются на раскадровке (Interface Builder).

Однако, когда я запускаю приложение, я не могу заставить изображения значков отображаться соответствующим образом.

  • Если я запускаю свое приложение на мониторе сетчатки, значок не отображается ни в одном из сегментов.
  • Если я перенесу окно на внешний монитор без сетчатки, отобразятся оба значка.
  • Если я удаляю один из двух наборов изображений из каталога w и запускаю приложение, другой значок отображается правильно! (на любом мониторе)
  • Если в дальнейшем установить одинаковые, оставшиеся изображения для обоих сегментов, они будут отображаться правильно!
  • Если я оставлю оба набора изображений в проекте, но сброслю поле Изображение в одном из сегментов на пустое, другой значок не отобразится!

Что на Земле происходит??

Я поместил пример проекта на GitHub, который воспроизводит проблему.


Изменить: просто чтобы убедиться, что я извлек ресурсы из скомпилированного двоичного файла приложения с помощью утилиты командной строки cartool (как объяснено в этом ответе), и все 4 изображения там в правильных размерах...


Решение: Как следует из ответа Ивана ниже, я переключился на использование векторной графики (PDF) для иконок. Я скачал пробную версию Acorn и воссоздал иконки в 1x раз, а затем экспортировал их в PDF.

Чтобы избежать размытия при увеличенном размере @2x во время выполнения, мне нужно было убедиться, что все координаты в редакторе были целыми числами, а также установить флажок "Привязать к пикселям" в инспекторе векторных фигур для каждого слоя формы:

Acorn UI

(Счастливый конец)

$ git commit -m "Fix toolbar icons for good (PDF)"

1 ответ

Решение

Согласно моему опыту, использование растровых изображений в панели инструментов является проблематичным. Вы можете попытаться точно выбрать рекомендуемые разрешения, чтобы избежать некоторых проблем: https://developer.apple.com/macos/human-interface-guidelines/icons-and-images/custom-icons/

Однако самым чистым способом было бы использовать векторные иконки (pdf), поскольку они просто работают так, как задумано.

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