Я пробую следующий код, но он не работает.
[helloToolbar setBackgroundColor:[UIColor clearColor]];
Я пробую следующий код, но он не работает.
[helloToolbar setBackgroundColor:[UIColor clearColor]];
Лучшее, что вы можете сделать, это использовать
[helloToolbar setBarStyle:UIBarStyleBlack];
[helloToolbar setTranslucent:YES];
Это даст вам черную, но полупрозрачную панель инструментов.
Чтобы сделать полностью прозрачную панель инструментов, используйте описанный здесь метод . В двух словах создайте новый класс TransparentToolbar, который наследует UIToolbar, и используйте это вместо UIToolbar.
TransarentToolbar.h
@interface TransparentToolbar : UIToolbar
@end
TransarentToolbar.m
@implementation TransparentToolbar
// Override draw rect to avoid
// background coloring
- (void)drawRect:(CGRect)rect {
// do nothing in here
}
// Set properties to make background
// translucent.
- (void) applyTranslucentBackground
{
self.backgroundColor = [UIColor clearColor];
self.opaque = NO;
self.translucent = YES;
}
// Override init.
- (id) init
{
self = [super init];
[self applyTranslucentBackground];
return self;
}
// Override initWithFrame.
- (id) initWithFrame:(CGRect) frame
{
self = [super initWithFrame:frame];
[self applyTranslucentBackground];
return self;
}
@end
(код из сообщения блога, связанного выше)
В iOS 5 просто вызовите setBackgroundImage и передайте прозрачное изображение.
Вот как я это делаю (я динамически генерирую прозрачное изображение):
CGRect rect = CGRectMake(0, 0, 1, 1);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
CGContextFillRect(context, rect);
UIImage *transparentImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[toolbar setBackgroundImage:transparentImage forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
Прозрачный (iOS 5.0):
[toolbar setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
полупрозрачный:
[toolbar setBarStyle:UIBarStyleBlack];
[toolbar setTranslucent:YES];
Накопительное решение для всех устройств от самого старого iOS 3.0 (iPhone 1) до новейшего iOS 6.1 (iPad mini).
@implementation UIToolbar (Extension)
- (void)drawRect:(CGRect)rect
{
if (CGColorGetAlpha(self.backgroundColor.CGColor) > 0.f)
{
[super drawRect:rect];
}
}
- (void)setTransparent
{
//iOS3+
self.backgroundColor = [UIColor clearColor];
//iOS5+
if ([self respondsToSelector:@selector(setBackgroundImage:forToolbarPosition:barMetrics:)])
{
[self setBackgroundImage:[[UIImage new] autorelease] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
}
//iOS6+
if ([self respondsToSelector:@selector(setShadowImage:forToolbarPosition:)])
{
[self setShadowImage:[[UIImage new] autorelease] forToolbarPosition:UIToolbarPositionAny];
}
}
@end
Если вы хотите прозрачную панель инструментов, вызовите setTransparent.
Если вы хотите создать непрозрачную панель инструментов, установите для нее backgroundColor или добавьте изображениеView самостоятельно.
Другим решением будет определение категории для UIToolbar:
@implementation UIToolbar(Transparent)
-(void)drawRect:(CGRect)rect {
// do nothing in here
}
@end
В IB установите панель инструментов как черный прозрачный и непрозрачный.
Мы только что заметили, что переопределение drawRect больше не работает с iOS 4.3. Он больше не называется (редактирование: похоже, только в Simulator). Вместо drawLayer: inContext: вызывается.
Отличное решение было опубликовано здесь
Теперь вы можете настроить каждый объект UIToolbar прозрачным, установив его tintColor на [UIColor clearColor]:)
В iOS 5 работает следующее:
UIToolbar *bar = [[UIToolbar alloc] initWithFrame:CGRectZero];
if (bar.subviews.count > 0)
[[[bar subviews] objectAtIndex:0] removeFromSuperview];
Это потому, что фон теперь является подвью. Этот код безопасен даже при новых итерациях iOS, но он может перестать работать. Это не закрытое использование API, ваше приложение безопасно отправить в хранилище.
Удостоверьтесь, что вы удалили backgroundView перед добавлением на панель UIBarButtonItem. Или мой код не будет работать.
Я только что протестировал следующее с iOS 4.3 на симуляторе и телефоне, кажется, работает нормально. Подкласс UIToolbar предоставляет один метод:
- (void)drawRect:(CGRect)rect
{
[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
}
toolbar.barStyle = UIBarStyleBlackTranslucent;
Это работает в iOS5.1 с минимальными усилиями. Я сопоставляю размер, так как только фон будет иметь тот же размер кадра, что и сама панель инструментов. Конечно, вы можете использовать другие критерии.
Enjoy.
Создайте подкласс UIToolbar следующим образом:
.h:
#import <UIKit/UIKit.h>
@interface UIClearToolbar : UIToolbar
@end
.m:
#import "UIClearToolbar.h"
@implementation UIClearToolbar
- (void)layoutSubviews {
// super has already laid out the subviews before this call is made.
[self.subviews enumerateObjectsUsingBlock:^(UIView* obj, NSUInteger idx, BOOL *stop) {
if (CGSizeEqualToSize(self.frame.size, obj.frame.size) ||
self.frame.size.width <= obj.frame.size.width) { // on device, the background is BIGGER than the toolbar.) {
[obj removeFromSuperview];
*stop = YES;
}
}];
}
@end
Спасибо @morais за ваше решение - здесь код переведен в MonoTouch:
public class TransparentToolbar : UIToolbar
{
public TransparentToolbar()
{
init();
}
public TransparentToolbar(RectangleF frame) : base(frame)
{
init();
}
void init()
{
BackgroundColor=UIColor.Clear;
Opaque=false;
Translucent=true;
}
public override void Draw(RectangleF rect)
{
}
}