我尝试以下代码,但它不起作用。
[helloToolbar setBackgroundColor:[UIColor clearColor]];
答案 0 :(得分:57)
要制作完全透明的工具栏,请使用方法described here。简而言之,创建一个继承自UIToolbar的新TransparentToolbar
类,并使用它来代替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
(上面链接的博文中的代码)
答案 1 :(得分:25)
在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];
答案 2 :(得分:16)
您可以做的最好的事情是使用
[helloToolbar setBarStyle:UIBarStyleBlack];
[helloToolbar setTranslucent:YES];
这将为您提供一个黑色但半透明的工具栏。
答案 3 :(得分:14)
透明(iOS 5.0):
[toolbar setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
<强>透光性:强>
[toolbar setBarStyle:UIBarStyleBlack];
[toolbar setTranslucent:YES];
答案 4 :(得分:7)
所有设备的累积解决方案,从最古老的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或自行添加imageView。
答案 5 :(得分:6)
另一种解决方案是为UIToolbar定义一个类别:
@implementation UIToolbar(Transparent)
-(void)drawRect:(CGRect)rect {
// do nothing in here
}
@end
在IB中,将工具栏设置为黑色半透明且不透明。
答案 6 :(得分:2)
我们刚刚注意到,重写drawRect不再适用于iOS 4.3。它不再被调用(编辑:似乎只在模拟器中)。相反,drawLayer:inContext:被调用。
发布了一个很棒的解决方案here
现在您可以将每个UIToolbar对象设置为透明,方法是将其tintColor设置为[UIColor clearColor]:)
答案 7 :(得分:2)
使用iOS 5可以实现以下功能:
UIToolbar *bar = [[UIToolbar alloc] initWithFrame:CGRectZero];
if (bar.subviews.count > 0)
[[[bar subviews] objectAtIndex:0] removeFromSuperview];
这是因为背景现在是一个子视图。即使使用iOS的新迭代,此代码也是安全的,但它可能会停止工作。这不是私有API使用,您的应用可以安全地提交到商店。
确保在向栏添加任何UIBarButtonItem
之前删除backgroundView。或者我的代码不起作用。
答案 8 :(得分:1)
我刚刚在模拟器和手机上测试了以下iOS 4.3,似乎工作正常。子类UIToolbar,提供一种方法:
- (void)drawRect:(CGRect)rect
{
[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
}
答案 9 :(得分:1)
toolbar.barStyle = UIBarStyleBlackTranslucent;
答案 10 :(得分:1)
这适用于iOS5.1,只需极少的工作量。我匹配大小,因为只有背景将具有与工具栏本身相同的帧大小。当然,你可以使用其他标准。
享受。
按如下方式创建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
答案 11 :(得分:0)
感谢@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)
{
}
}