我一直拥有这段代码,它曾经可以工作,但我认为它在 iOS 6 中开始表现出令人讨厌的行为。SO 上有几个类似的线程,但我还没有找到我满意的解决方案到目前为止。我找到了一种解决方法(见下文),但这似乎不是“正确”的方法。
当我将图像用作 aUIBarButtonItem
并将其放入 aUIToolbar
时,包含的矩形UIToolbar
并不完全透明。我用于的 PNG 图像UIBarButtonItem
是透明的,所以这不是问题。这是一个例子:
当我使用文本而不是图像作为 时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 的建议,我之前已经添加了这个,[toolBarButtons setItems...]
但它没有任何影响:
toolBarButtons.backgroundColor = [UIColor clearColor];
[toolBarButtons setTranslucent:YES];
[toolBarButtons setOpaque:NO];
我找到了这个线程,jd的答案提供了一个解决方法(编辑以匹配我的变量):
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];
我还看到了一些解决这个问题的方法,需要获取顶部或底部的颜色navigationController
并应用渐变,但我拒绝相信没有办法使矩形的UIToolbar
完全透明,这应该允许要通过的navigationController
颜色,渐变和所有。
应用蒙版图像真的是模拟正确 UI 体验的唯一方法吗?Apple真的没有提供一种方法来简单地使UIToolbar
包含矩形完全透明吗?
现在,我有正确的行为,但我觉得我没有正确的解决方案。这感觉就像一个黑客。有没有人知道更好的方法来实现这一点?