Пользовательский фон/прозрачный фон на UIBarButtonItem?

Как достигается этот эффект? Фрагменты кода приветствуются.

Это можно увидеть в приложении Notes и других приложениях в App Store.

Кажется, что кнопки на навигационном контроллере прозрачны и показывают пользовательский фон контроллера навигации или что у них есть собственный фон, применяемый к ним. Любые идеи о том, как это достигается?

EDIT:

Вот пример из приложения iBooks для iPhone. Как вы можете видеть, не только UIButtons, но и сегментированный элемент управления имеют пользовательские фоны. Я думаю, что есть способ глобально установить прозрачность/фон для разных элементов интерфейса.

examplehttp://c0839932.cdn.cloudfiles.rackspacecloud.com/iBooks%201.1%20-%206.png

Ответ 1

Если вы хотите иметь UIBarButtonItem всюду в своем приложении, то вы можете сделать это в AppDelegate.m и в вашем методе application:didFinishLaunchingWithOptions:, вы можете написать

[[UIBarButtonItem appearance] setBackgroundImage:[[UIImage alloc] init] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

Это создаст пустое изображение, и оно установит для фона UIBarButtonItem. С записью в AppDelegate вы убедитесь, что везде, где вы используете UIBarButtonItem, у него будет прозрачный фон, даже ваши кнопки назад.

Ответ 2

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

Посмотрите документацию UIBarButtonItem. Существуют методы init, которые будут использовать пользовательский вид или изображение и создать из него UIBarButtonItem. Поэтому создайте представление или изображение с желаемым внешним видом и используйте его. Одна вещь, которую вы можете попробовать, - создать UIButton так, как вы хотите, чтобы он выглядел, а затем выполните [[UIBarButtonItem alloc] initWithCustomView:button];

Другое решение - отправить свойство tintColor вашего UINavigationBar на любой цвет, который вы хотите, и кнопка примет этот цвет.

Ответ 3

Вы также можете создать стандартный UIButton и установить его стиль в качестве пользовательского и настроить свой цвет изображения или фона для этой кнопки и перетащить его на UINavigationBar.

Ответ 4

Вы также можете использовать прокси-сервер Appearance для установки свойства backgroundImage UIBarButtonItems на свое собственное прозрачное изображение:

UIImage *buttonImage = [[UIImage imageNamed:@"barButton"]  resizableImageWithCapInsets:UIEdgeInsetsMake(12, 8, 12, 8)];
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundImage:buttonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackButtonBackgroundImage:buttonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

Обратите внимание, что я думаю, что есть ошибка при установке вставки для определенных значений (11-13?), поэтому, если у вас возникли проблемы, попробуйте изменить вставки, поскольку вы, возможно, наткнулись на эту ошибку.