У меня есть UIToolbar с белым оттенком, с элементом кнопки панели, за которым следует некоторое гибкое пространство, за которым следует другой элемент кнопки панели. Я хотел бы сделать панель инструментов полностью понятной, чтобы я мог видеть, что находится под гибким пространством (меня не волнует, что находится за кнопками). Есть ли способ сделать это? Я попытался сделать панель инструментов полупрозрачной, но это не дает полной ясности.
Как сделать так, чтобы у UIToolbar был чистый фон?
Ответы (8)
Подкласс UIToolbar и реализуйте метод ниже:
- (void)drawRect:(CGRect)rect
{
[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
}
подробнее см. здесь
UIInterface.h
. Но что могло пойти не так? : S
- person Scott Corscadden; 13.11.2013
установите toolbarStyle -1 как это
tools.barStyle = -1; // clear background
Хакер, извините, но единственный способ, который я нашел до сих пор, который надежно работает как в iOS 7, так и в iOS 6, - это сделать это:
[[toolbar.subviews objectAtIndex:0] removeFromSuperview];
firstObject
вместо objectAtIndex:0
- person Laszlo; 27.09.2016
firstObject
был частным API. ;)
- person Danyal Aytekin; 29.09.2016
Если вам нужно глобальное решение, воспользуйтесь прокси UIAppearance
:
UIToolbar *toolbarAppearance = [UIToolbar appearance];
[toolbarAppearance setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
Это можно сделать без создания подклассов в 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];
В ответе @ievgen в Swift 5.1 есть решение.
toolbar.setBackgroundImage(UIImage(), forToolbarPosition: .any, barMetrics: .default)
toolbar.backgroundColor = .clear
Если вы хотите очистить разделительную серую линию
toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)
Swift 3 версия принятого ответа:
self.toolbar.isTranslucent = true
self.toolbar.setBackgroundImage(UIImage(),
forToolbarPosition: UIBarPosition.any,
barMetrics: UIBarMetrics.default)
self.toolbar.setShadowImage(UIImage(), forToolbarPosition: UIBarPosition.any)