NSToolbarItem с сегментированным управлением - изображения не отображаются правильно
Я пытаюсь эмулировать элементы управления панели инструментов Xcode, чтобы показать / скрыть навигатор и инспектор:
... но без нижней панели (только слева и справа: два сегмента)
Я сделал скриншот иконок из пользовательского интерфейса Xcode и проследил их в приложении для редактирования изображений. Ресурсы для левой панели:
@ 1x:
(20x20 при 72 dpi)
@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 во время выполнения, мне нужно было убедиться, что все координаты в редакторе были целыми числами, а также установить флажок "Привязать к пикселям" в инспекторе векторных фигур для каждого слоя формы:
(Счастливый конец)
$ git commit -m "Fix toolbar icons for good (PDF)"
1 ответ
Согласно моему опыту, использование растровых изображений в панели инструментов является проблематичным. Вы можете попытаться точно выбрать рекомендуемые разрешения, чтобы избежать некоторых проблем: https://developer.apple.com/macos/human-interface-guidelines/icons-and-images/custom-icons/
Однако самым чистым способом было бы использовать векторные иконки (pdf), поскольку они просто работают так, как задумано.