UIImage UIToolbarbutton不完全透明
我已经有了这个代码永远,它曾经工作,但它开始展示一个恼人的行为,我认为,iOS 6。有几个类似的线程上,所以我还没有find一个解决scheme,我很舒服到目前为止。 我find了一个解决方法(见下面),但它似乎不是“正确”的方式来做到这一点。
这是一个问题相同的线程,但没有答案。
当我使用图像作为UIBarButtonItem
并将其放入UIToolbar
, UIToolbar
的包含矩形不完全透明。 我用于UIBarButtonItem
的PNG图像是透明的,所以这不是问题。 这里是一个例子:
当我使用文本而不是图像作为UIBarButtonItem
,透明度按预期工作。 如此:
这是自永远起作用的代码:
NSMutableArray *buttonItems = [[[NSMutableArray alloc] initWithCapacity: 1] autorelease]; UIImage *printButtonImage = [UIImage imageNamed:@"buttonPrint.png"]; UIToolbar *toolBarButtons = [[[UIToolbar alloc] initWithFrame:CGRectMake( 0, 0, 52.0, 44.01 )] autorelease]; UIBarButtonItem *printButton = [[[UIBarButtonItem alloc] initWithImage:printButtonImage style:UIBarButtonItemStyleBordered target:self action:@selector(printDocument:)] autorelease]; [buttonItems addObject:printButton]; [toolBarButtons setItems:buttonItems animated:YES]; self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:toolBarButtons] autorelease];
根据SO的build议,我在[toolBarButtons setItems...]
之前添加了这个,但是它没有影响:
toolBarButtons.backgroundColor = [UIColor clearColor]; [toolBarButtons setTranslucent:YES]; [toolBarButtons setOpaque:NO];
我发现这个线程 ,jd的答案提供了一个解决方法(编辑匹配我的variables):
const float colorMask[6] = {222, 255, 222, 255, 222, 255}; UIImage *img = [[UIImage alloc] init]; UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)]; [toolBarButtons setBackgroundImage:maskedImage forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
我也看到了这个问题的几个解决scheme,需要获取navigationController
控制器的顶部或底部的颜色和应用渐变,但我拒绝相信,没有办法使UIToolbar
的矩形完全透明,这应该允许navigationController
颜色通过,渐变和所有。
是否应用蒙版图像真的是模拟正确UI体验的唯一方法? 苹果真的没有提供一种方法来简单地使一个包含矩形的UIToolbar
完全透明吗?
现在,我有正确的行为 ,但我不觉得我有正确的解决scheme 。 这感觉像一个黑客。 有没有人知道有更好的方法来完成这个?
我在我的应用程序中做同样的事情。 (这UIBarButtonItem's
在UINavigationBar
中托pipe一个UIToolbar
,因为UINavigationBar
不像UIToolbar
那样渲染UIBarButtonItem's
。)
以下是我所做的以避免您看到的问题:
toolbar.barStyle = self.navigationController.navigationBar.barStyle; toolbar.tintColor = self.navigationController.navigationBar.tintColor;
我最后一次检查navigationBar.barStyle是一个没有在UIBarStyle枚举中logging的值…我认为它是'3'。
编辑:恼人的是,这不适用于iPhone,因为它在iPad上工作…
这个UIToolbar子类似乎工作正常。 用它代替普通的UIToolbar:
@interface NavToolbar : UIToolbar @end @implementation NavToolbar - (void) layoutSubviews { [super layoutSubviews]; self.backgroundColor = [UIColor clearColor]; self.opaque = NO; } - (void) drawRect:(CGRect)rect { } @end
而且,这里是演示使用它的代码。 没有NavToolbar,我看到你提出的问题; 与NavToolbar它根据需要工作。 在iOS6手机模拟器中testing。
- (void)viewDidLoad { [super viewDidLoad]; UIToolbar* tb = [[NavToolbar alloc] initWithFrame: CGRectMake(0, 0, 44, 44)]; UIBarButtonItem* bbi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target: nil action: nil]; tb.items = @[bbi]; tb.barStyle = self.navigationController.navigationBar.barStyle; UIBarButtonItem* tbbbi = [[UIBarButtonItem alloc] initWithCustomView: tb]; tbbbi.width = 44; self.navigationItem.rightBarButtonItem = tbbbi; }