Подтвердить что ты не робот

Не может быть прозрачным UIToolBar?

Я пробую следующий код, но он не работает.

[helloToolbar setBackgroundColor:[UIColor clearColor]];
4b9b3361

Ответ 1

Лучшее, что вы можете сделать, это использовать

[helloToolbar setBarStyle:UIBarStyleBlack];
[helloToolbar setTranslucent:YES];

Это даст вам черную, но полупрозрачную панель инструментов.

Ответ 2

Чтобы сделать полностью прозрачную панель инструментов, используйте описанный здесь метод . В двух словах создайте новый класс 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

(код из сообщения блога, связанного выше)

Ответ 3

В 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];

Ответ 4

Прозрачный (iOS 5.0):

[toolbar setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];

полупрозрачный:

[toolbar setBarStyle:UIBarStyleBlack];
[toolbar setTranslucent:YES];

Ответ 5

Накопительное решение для всех устройств от самого старого 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 самостоятельно.

Ответ 6

Другим решением будет определение категории для UIToolbar:

@implementation UIToolbar(Transparent) 
-(void)drawRect:(CGRect)rect {
    // do nothing in here
}
@end

В IB установите панель инструментов как черный прозрачный и непрозрачный.

Ответ 7

Мы только что заметили, что переопределение drawRect больше не работает с iOS 4.3. Он больше не называется (редактирование: похоже, только в Simulator). Вместо drawLayer: inContext: вызывается.

Отличное решение было опубликовано здесь

Теперь вы можете настроить каждый объект UIToolbar прозрачным, установив его tintColor на [UIColor clearColor]:)

Ответ 8

В iOS 5 работает следующее:

UIToolbar *bar = [[UIToolbar alloc] initWithFrame:CGRectZero];
if (bar.subviews.count > 0)
     [[[bar subviews] objectAtIndex:0] removeFromSuperview];

Это потому, что фон теперь является подвью. Этот код безопасен даже при новых итерациях iOS, но он может перестать работать. Это не закрытое использование API, ваше приложение безопасно отправить в хранилище.

Удостоверьтесь, что вы удалили backgroundView перед добавлением на панель UIBarButtonItem. Или мой код не будет работать.

Ответ 9

Я только что протестировал следующее с iOS 4.3 на симуляторе и телефоне, кажется, работает нормально. Подкласс UIToolbar предоставляет один метод:

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

Ответ 10

toolbar.barStyle = UIBarStyleBlackTranslucent;

Ответ 11

Это работает в 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

Ответ 12

Спасибо @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)
    {
    }
  }