Cocoa touch 不能';工具条是透明的吗?
我尝试了下面的代码,但不起作用Cocoa touch 不能';工具条是透明的吗?,cocoa-touch,Cocoa Touch,我尝试了下面的代码,但不起作用 [helloToolbar setBackgroundColor:[UIColor clearColor]]; 你能做的最好的事情就是使用 [helloToolbar setBarStyle:UIBarStyleBlack]; [helloToolbar setTranslucent:YES]; 这将为您提供一个黑色但半透明的工具栏。要制作一个完全透明的工具栏,请使用以下方法。简而言之,创建一个新的TransparentToolbar类,该类继承自UITool
[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
(上面链接的博客文章中的代码)另一个解决方案是为UIToolbar定义一个类别:
@implementation UIToolbar(Transparent)
-(void)drawRect:(CGRect)rect {
// do nothing in here
}
@end
在IB中,将工具栏设置为黑色半透明和非不透明。我们刚刚注意到,覆盖drawRect在iOS 4.3中不再起作用。不再调用它(编辑:似乎只在模拟器中)。而是调用drawLayer:inContext: 发布了一个很好的解决方案
现在,您可以通过将每个UIToolbar对象的tintColor设置为[UIColor clearColor]:)将其设置为透明。我刚刚在模拟器和手机上用iOS 4.3测试了以下内容,看起来效果不错。子类UIToolbar,提供一种方法:
- (void)drawRect:(CGRect)rect
{
[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
}
感谢@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)
{
}
}
在iOS 5中,以下工作:
UIToolbar *bar = [[UIToolbar alloc] initWithFrame:CGRectZero];
if (bar.subviews.count > 0)
[[[bar subviews] objectAtIndex:0] removeFromSuperview];
这是因为背景现在是一个子视图。这段代码即使在新的iOS迭代中也是安全的,但它可能会停止工作。这不是私人API使用,您的应用可以安全地提交到应用商店
在将任何
UIBarButtonItem
s添加到工具栏之前,请确保删除背景视图。或者我的代码将无法工作。在iOS 5中,只需调用setBackgroundImage并传递一个透明图像
我是这样做的(我动态生成透明图像):
这在iOS5.1中非常容易实现。我正在匹配大小,因为只有背景与工具栏本身具有相同的帧大小。当然,您可以使用其他标准 享受 创建UIToolbar的子类,如下所示: .h:
#导入
@界面UIClearToolbar:UIToolbar
@结束
.m:
#导入“UIClearToolbar.h”
@实现UIClearToolbar
-(无效)布局子视图{
//在进行此调用之前,super已经布置好了子视图。
[self.subviews enumerateObjectsUsingBlock:^(UIView*obj,NSUInteger idx,BOOL*stop){
if(CGSizeEqualToSize(self.frame.size,obj.frame.size)||
self.frame.size.width透明(iOS 5.0):
[toolbar setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
[toolbar setBarStyle:UIBarStyleBlack];
[toolbar setTranslucent:YES];
半透明:
[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),所有设备的累积解决方案
如果需要透明工具栏,请在其上调用setTransparent
。
如果需要不透明工具栏,请自行设置背景色或添加imageView。查看下面的解决方案,以获得完全透明(非半透明)的工具栏工具栏。我添加了一个在iOS 5.1上运行的答案-你可以在布局子视图期间对UIToolbar进行子类化并查询子视图。请注意,这将使应用程序中的所有工具栏都透明。谢谢!我这样做了,但现在由于某些原因,工具栏是黑色的,不透明…这很好用,我使用它作为一种“简单”的方式,在t中放置多个按钮导航栏的左侧和/或右侧(另一个按钮具有工具栏作为自定义视图)。但是,在这种情况下,还需要在applyTranslucentBackground方法中将tintColor设置为clearColor。我认为它在iOS 5上停止工作。但在iOS 5上,您有“正确的”使其透明的方法。iOS5.1正确的方法对我不起作用,所以我按原样实现了它,它起到了一种魅力。也许等我有时间的时候,我会看到哪里出了问题,然后用新的iOS5方法来完成。我的UIBarButton项目应该是白色的,但这个工具栏代码非常模糊。有没有其他方法可以提供我想要的东西iOS 4?iOS>5.0的不错的解决方案。谢谢你可以给它一个新分配的UIImage:[工具栏setBackgroundImage:[UIImage alloc]forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
可能的副本对我有用。Swift:self.setBackgroundImage(UIImage()),forToolbarPosition:。任意,barMetrics:。默认值)
[toolbar setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
[toolbar setBarStyle:UIBarStyleBlack];
[toolbar setTranslucent:YES];
@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