Как сделать так, чтобы у UIToolbar был чистый фон?

У меня есть UIToolbar с белым оттенком, с элементом кнопки панели, за которым следует некоторое гибкое пространство, за которым следует другой элемент кнопки панели. Я хотел бы сделать панель инструментов полностью понятной, чтобы я мог видеть, что находится под гибким пространством (меня не волнует, что находится за кнопками). Есть ли способ сделать это? Я попытался сделать панель инструментов полупрозрачной, но это не дает полной ясности.


person Kyle Rosenbluth    schedule 21.08.2012    source источник
comment
возможный дубликат прозрачного UIToolbar   -  person trojanfoe    schedule 21.08.2012
comment
stackoverflow.com/a/7027807/653513   -  person Rok Jarc    schedule 21.08.2012
comment
Привет, ребята, извините за дубликат. Другой я не заметил. Закройте вопрос и отметьте его как повторяющийся.   -  person Kyle Rosenbluth    schedule 21.08.2012


Ответы (8)


Подкласс UIToolbar и реализуйте метод ниже:

- (void)drawRect:(CGRect)rect 
{
  [[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
  CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
}

подробнее см. здесь

person Shamsudheen TK    schedule 21.08.2012
comment
Так это повторяющийся вопрос? - person trojanfoe; 21.08.2012
comment
Закройте вопрос и отметьте его как дубликат того, на который вы ссылались. - person trojanfoe; 21.08.2012
comment
Это действительно правильный способ сделать это. Хотя это довольно неприятно, что его нельзя настроить без подкласса ... - person MikeS; 21.08.2012
comment
Вы можете настроить его без создания подклассов - см. Пункт @ NANNAV ниже. Более элегантный IMHO, заметьте, -1 не вписывается в перечисление UIBarStyle в UIInterface.h. Но что могло пойти не так? : S - person Scott Corscadden; 13.11.2013
comment
Отлично для моего случая, но не для всех подойдет - person Vladimir Stazhilov; 02.12.2014

установите toolbarStyle -1 как это

 tools.barStyle = -1; // clear background
person NANNAV    schedule 10.07.2013
comment
У меня работает на iOS 11! - person Alex Black; 04.06.2019

Хакер, извините, но единственный способ, который я нашел до сих пор, который надежно работает как в iOS 7, так и в iOS 6, - это сделать это:

[[toolbar.subviews objectAtIndex:0] removeFromSuperview];
person Danyal Aytekin    schedule 14.11.2013
comment
всегда используйте предпочитать firstObject вместо objectAtIndex:0 - person Laszlo; 27.09.2016
comment
Спасибо @Tuss. В свою защиту, в iOS 6 firstObject был частным API. ;) - person Danyal Aytekin; 29.09.2016

Если вам нужно глобальное решение, воспользуйтесь прокси UIAppearance:

UIToolbar *toolbarAppearance = [UIToolbar appearance]; [toolbarAppearance setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

person Adam Waite    schedule 21.04.2014

Это можно сделать без создания подклассов в iOS 6+, установив для свойства translucent значение `YES.

Это не будет работать в iOS 5 ниже. Вот как это можно сделать без создания подклассов панели инструментов:

const float colorMask[6] = {222, 255, 222, 255, 222, 255};
UIImage *img = [[UIImage alloc] init];
UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)];

[self.toolbar setBackgroundImage:maskedImage forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
person jd.    schedule 13.12.2012

В ответе @ievgen в Swift 5.1 есть решение.

toolbar.setBackgroundImage(UIImage(), forToolbarPosition: .any, barMetrics: .default)
toolbar.backgroundColor = .clear

Если вы хотите очистить разделительную серую линию

toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)
person Mohammad Reza Koohkan    schedule 05.06.2020

Swift 3 версия принятого ответа:

   self.toolbar.isTranslucent = true
    self.toolbar.setBackgroundImage(UIImage(),
                               forToolbarPosition: UIBarPosition.any,
                               barMetrics: UIBarMetrics.default)

    self.toolbar.setShadowImage(UIImage(), forToolbarPosition: UIBarPosition.any)
person Vivek    schedule 26.12.2017

person    schedule
comment
Этот подход был единственным, который работал при вставке прозрачной панели UIToolbar как NavigationItem.TitleView. - person Miros; 16.07.2013
comment
На ios7.1 я вижу границу размером 1 пиксель (тень?) В верхней части панели инструментов. - person Chris; 18.03.2014
comment
@ Крис, я заметил то же самое. Не знаю, как это исправить. К счастью, мне нужно сделать это во всплывающем окне, где цвет границы представления черный. Итак, я только что переместил панель инструментов вверх, чтобы тень (или что-то еще) потерялась на границе. - person Andrew; 19.03.2014
comment
@Andrew - Я использовал setShadowImage: forToolbarPosition: чтобы установить для теневого изображения значение [[UIImage alloc] init] - person Chris; 21.03.2014
comment
Примечание: если панель инструментов добавлена ​​в сцену, на нее не ссылается self.navigationController.toolbar - это панель по умолчанию, которой владеет navigationController (см. stackoverflow.com/a/8753847/481207). - person Matt; 09.12.2014
comment
Версия Swift.: Self.toolbar.isTranslucent = true self.toolbar.setBackgroundImage (UIImage (), forToolbarPosition: UIBarPosition.any, barMetrics: UIBarMetrics.default) self.toolbar.setShadowImage (UIImage (), forToolbarPosition (), forToolbarPosition - person Vivek; 26.12.2017