Как вы вертикально центрируете изображение на NSButton

Я создаю приложение для Mac в стиле Lion Mail.app. В рамках этого я пытаюсь создать панель инструментов, аналогичную той, что находится в Mail.app, но я не могу получить изображение на кнопке моей панели инструментов по центру по вертикали.

Глядя на панель инструментов Mail.app, я вижу красивую серию кнопок со значками по центру:

введите здесь описание изображения

но когда я перехожу к конструктору интерфейсов, я не могу воссоздать ту же кнопку. Что я получаю:

введите здесь описание изображения

То, что я пытался сделать, это в Interface Builder:

  1. Создать новое окно
  2. Добавьте NSToolbar в это окно
  3. Добавьте NSButton на панель инструментов со стилем — «Push», «Image» — «Envelope», «Position» — «NSImageOnly», «Scaling» — «Proportional Down».

Как вы можете видеть, значок явно не центрирован по вертикали на кнопке, как на панели инструментов Mail.app.

У кого-нибудь есть идеи???

На данный момент я использую XCode 4.2 и выкладываю эту кнопку с помощью Interface Builder. Я пытаюсь создать кнопку панели инструментов, ТОЛЬКО добавляя изображение к кнопке, а не рисуя кнопку для каждого элемента, т.е. рисуя границу и значок.

Любая помощь будет принята с благодарностью, так как это сводило меня с ума.

Заранее спасибо - АЯЛ


person Ayal    schedule 23.12.2011    source источник


Ответы (3)


Оказывается, ответ на эту проблему был намного проще, чем я ожидал. После долгого скрежета зубов, выдергивания волос и перебора пикселей я наткнулся на решение.

Вместо использования кнопки «Push» мне просто пришлось переключиться на кнопку «Round Textured». Как только я сделал это, любое изображение, которое я добавлял к кнопке, было красиво центрировано. Затем мне просто пришлось вручную масштабировать изображение, чтобы оно выглядело правильно.

Тогда рецепт для панели инструментов Mail.app выглядит следующим образом:

  1. Добавьте кнопку на панель инструментов
  2. Установите стиль кнопки на «Скругленная текстурированная».
  3. Установить изображение кнопки
  4. Установите положение «NSImageOnly».
  5. Установите размер кнопки 40 x 25, а также минимальный и максимальный размеры ToolbarItem.

В результате панель инструментов может выглядеть очень похожей на панель инструментов Mail.app.

Всем спасибо - АЯЛ

person Ayal    schedule 03.01.2012

Один из способов сделать это - сделать так, чтобы ваше изображение на самом деле было кнопкой, т.е. занимало весь холст кнопки. Вам нужно будет использовать метод setBordered: кнопки, чтобы граница кнопки не рисовалась.

person TrevorL    schedule 23.12.2011

вы можете сделать изображение кнопки в чем-то вроде gimp или photoshop, а затем использовать его в качестве фона или изображения для кнопки.

я чувствую, что ты собираешься сказать "это то, что я делаю". и, может быть, вы сделали маленькую иконку почты, но я имею в виду, что вы должны сделать целую кнопку, контур и все остальное, а затем использовать это для изображения кнопки. смысл?

как здесь, просто используйте это как фон введите здесь описание изображения

person owen gerig    schedule 23.12.2011
comment
Хороший ответ, но я надеялся найти способ создать кнопку программно, а не рисовать кнопку вручную. - person Ayal; 25.12.2011
comment
не совсем уверен, что понимаю, что вы имеете в виду. этот png должен быть ресурсом, тогда независимо от того, используете ли вы IB, он должен быть равен button.imageview.image. если это не отвечает на ваш вопрос, я думаю, вам нужно обновить свой вопрос - person owen gerig; 27.12.2011
comment
Это не очень хорошая идея. Стиль кнопок меняется в разных версиях OS X. Даже в одной версии есть ряд настроек, которые изменяют форму и стиль элементов пользовательского интерфейса. Как и в большинстве вещей Cocoa, лучше найти способ Apple сделать что-то, вместо того, чтобы пытаться изобрести решение для имитации того, что делает ОС. - person Andrew Theken; 14.03.2016