Программно изменить представление UIBarButtonItem, чтобы оно было прозрачным

У меня были проблемы с тем, чтобы это работало, нигде я не видел рабочего примера в сети. Теперь предлагаю награду за это, потому что это сводит меня с ума. Это должно быть легко, но, похоже, это не так.

Я бы хотел, чтобы мои кнопки на UINavigationBar были полупрозрачными, чтобы они позволяли просвечивать фон всего, что находится на UINavigationBar.Этот эффект наблюдается во многих приложениях, примеры изображений ниже. Вы можете сделать это, установив собственный фон для элемента, что я считаю неприемлемым решением, потому что оно требует, чтобы вы заранее подготовили изображения, и они не будут адаптированы для переменных кнопок и т. Д. Они не будут выглядеть как Apple UI и я. не верьте, что для этого есть причина, UIKit уже рисует фон для этих кнопок, нам просто нужно его изменить. Правильное решение использует элементы панели и представления, созданные API Apple.

UIBarButtonItem не является подклассом UIView. Когда вы создаете его и добавляете в UINavigationBar, какой-то код где-то в структуре рисует для него представление. Кажется, что методы фреймворка сопротивляются всему, что связано с обеспечением прозрачности элементов полосы, например свойству tintColor.

Например, это НЕ работает:

 UINavigationItem *item = [[UINavigationItem alloc] init];
 UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"SUCKS" style:UIBarButtonItemStyleBordered target:self action:@selector(whatever:)];
editButton.tintColor = [UIColor colorWithWhite:0.4 alpha:0.3];
item.leftBarButtonItem = editButton;

Ничего из того, что я делаю, не заставит UINavigationBar разрешить полупрозрачность для своих элементов панели. Я считаю, что во время выполнения нам нужно:

  1. Получить изображение для элемента панели
  2. Замаскировать его для прозрачности
  3. Установить новое изображение на элементе панели

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

Like This

6
задан Community 8 February 2017 в 14:34
поделиться